实现QQ、微信、新浪微博和百度第三方登录(Android Studio)
前言:
对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享;
各大开放平台注册账户获取AppKey和AppSecret
Mob开放平台地址:http://www.mob.com/#/index
QQ开放平台地址:http://open.qq.com/
新浪微博开放平台地址:http://open.weibo.com/
微信开放平台地址:https://open.weixin.qq.com/
百度开放平台地址:http://apps.bdimg.com/
注:
一、关于各大开放平台的开发者用户注册和创建应用获取AppKey、AppSecret我就不多说了,对于大家来说这都so easy;
二、Eclipse在创建应用填写包名应该是manifest里面的packpage:
studio的则是build.gradle里面的applicationId:
一般情况下,studio的applicationId和manifest下的包名是一致的,但是applicationId是手动改变的,所以注意在创建应用的时候,要使用applicationId。
新浪微博第三方登录实现:
在做新浪微博第三方登录的时候,参考他们的api文档,感觉他们的api文档写的特别的乱,并且下载的Demo运行还报错,以至于浪费了我大半天的时间,去网上搜了几篇关于第三方登录的文章,写的并不全,时代也比较久远,并且基本没有相关Demo下载,有的就是拷贝的新浪微博的开放平台的原文,我也是醉了…..
由于时间比较紧迫,所以并没有再继续深究下去。大家应该都知道有许多平台把例如分享、登录等功能集成好了,实现功能十分简单,这一次我是利用的Mob移动开发平台http://www.mob.com/#/index 实现的新浪微博第三方登录,感觉还不错实现起来比较简单。
一、下载Mob平台的SDK
首先下载SDK,得到我们需要的资源
SDK地址(http://www.mob.com/#/downloadDetail/ShareSDK/android),下载下来发现无法解压(你们可以试一下),联系他们客服,他们说:上传错误,就给我发了一个。我把它和我的Dmeo放在一起,可供下载。
找到ShareSDK for Android包下的QuickIntegrater.jar文件双击:
感觉还不错,各大平台都有,只需要选择新浪微博就可以(我感觉还是没包装过的比较好,所以另外三种登录方式没采用这种方法),解压之后生成一个Sample文件:
我们需要把里面的东西全部拿到我们的studio项目中,libs、res和src里面的全部拷贝复制就可以,studio新建assets的方法和Eclipse不一样,所以给大家发个图:
点击创建就可以了,再把assets下的ShareSDK.xml拷贝就去;
其次配置ShareSDK
把ShareSDK拷贝进去之后,我们需要把ShareSDK.xml文件中关于Mob(ShareSDK)和新浪微博(SinaWeibo)的Appkey、AppSecret和RedirectUrl替换成我们申请的值,如下图:
把红箭头中的ShareSDK中的AppKey换成我们在Mob后台申请的AppKey;
红框框中的SinaWeibo中的AppKey、AppSecret和RedirectUrl换成我们在新浪微博后台申请的对应的值;
RedirectUrl这个字段的值就是我们后台项目中的应用信息——>高级信息——>OAuth2.0 授权设置中的授权回调页这个字段,需要我们填写一个有效的地址就可以,例如下图:
注:如果RedirectUrl这个字段不填或填写不对会报以下错误:
二、配置AndroidManifest.xml
添加activity信息
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" >
</activity>
二、添加代码
首先是Mob的授权,在程序的入口处添加授权代码:
//Mob平台授权
ShareSDK.initSDK(this);
其次直接调用thirdSinaLogin()方法就可以了:
//-----------------------------------------------------新浪微博授权相关--------------
/** 新浪微博授权、获取用户信息页面 */
private void thirdSinaLogin() {
//初始化新浪平台
Platform pf = ShareSDK.getPlatform(MainActivity.this, SinaWeibo.NAME);
pf.SSOSetting(true);
//设置监听
pf.setPlatformActionListener(MainActivity.this);
//获取登陆用户的信息,如果没有授权,会先授权,然后获取用户信息
pf.authorize();
}
/** 新浪微博授权成功回调页面 */
@Override
public void onComplete(Platform platform, int action, HashMap<String, Object> hashMap) {
/** res是返回的数据,例如showUser(null),返回用户信息,对其解析就行
* http://sharesdk.cn/androidDoc/cn/sharesdk/framework/PlatformActionListener.html
*
*/
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = 1;
msg.arg2 = action;
msg.obj = platform;
UIHandler.sendMessage(msg, this);
}
/** 取消授权 */
@Override
public void onCancel(Platform platform, int action) {
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = 3;
msg.arg2 = action;
msg.obj = platform;
UIHandler.sendMessage(msg, this);
}
/** 授权失败 */
@Override
public void onError(Platform platform, int action, Throwable t) {
t.printStackTrace();
t.getMessage();
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = 2;
msg.arg2 = action;
msg.obj = t;
UIHandler.sendMessage(msg, this);
}
@Override
public boolean handleMessage(Message msg) {
switch(msg.what) {
case MSG_TOAST: {
String text = String.valueOf(msg.obj);
Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
}
break;
case MSG_ACTION_CCALLBACK: {
switch (msg.arg1) {
case 1: {