Android第三方登录集合(QQ、微信、微博、百度、facebook、twitter)

  • 分开依赖,需要哪个集成哪个,不捆绑在一起。

Step 1

在根build.gradle加入jitpack的仓库:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Step 2

在module的build.gradle添加依赖

dependencies {
    compile 'com.github.fszeng2011:thirdpartlogin-core:1.0'
    compile 'com.github.fszeng2011:thirdpartlogin-qq:1.0'
    compile 'com.github.fszeng2011:thirdpartlogin-weixin:1.0'
    compile 'com.github.fszeng2011:thirdpartlogin-weibo:1.0'
    compile 'com.github.fszeng2011:thirdpartlogin-baidu:1.0'
    compile 'com.github.fszeng2011:thirdpartlogin-facebook:1.0'
    compile 'com.github.fszeng2011:thirdpartlogin-twitter:1.0'
}

Step 3 —-(微信)

在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自WXEventActivity,内容不需要写。

Step 4 —-(微信)

在AndroidManifest.xml添加如下:

<activity
    android:theme="@android:style/Theme.NoDisplay"
    android:name=".wxapi.WXEntryActivity"
    android:exported="true"/>

Step 5

在字符串资源xml文件中添加appid和secret。

<string name="tencent_appid">222222</string>
<!-- tencent+appid -->    
<string name="tencent_login_scheme">tencent222222</string>
<string name="weixin_appid">wxde56b4c4fcd755c7</string>
<string name="weixin_secret">33702de56b4c4fcd755c76bbf7468943</string>
<string name="weibo_appkey">345347072</string>
<string name="baidu_apikey">u10rwmxIpFG8YTXYaGXSI6lV</string>
<string name="facebook_appkey">875646142592091</string>
<!-- fb+appid -->
<string name="facebook_login_scheme">fb875646142592091</string>
<string name="twitter_apikey">J20TVzE1VihlIt5Vr3XufK6pN</string>
<string name="twitter_secret">aiaym3F07GpRMsecMrjZ2ocmrI7T0TGXfmEqXebpWrUAciKG0v</string>

获取方法:

QQ:到http://open.qq.com/的应用管理里创建应用即可。
微信:到https://open.weixin.qq.com创建移动应用,需要认证通过的开发者才能开通登录权限。没有开通登录权限是无法调起授权页面的。
微博:到http://open.weibo.com/development/mobile接入应用,回调页填写:https://api.weibo.com/oauth2/default.html,也可以填写自定义的,如果填写了自定义的,在实例化WeiboLogin时需要使用传入回调页链接的构造方法。填写完资料即可完成接入,不需要提交审核即可测试登录。
百度:到http://developer.baidu.com/注册帐号,右上角用户名下拉菜单“应用管理”里创建工程,创建后就有apikey,安全设置里如果启用了“Implicit Grant授权方式”,授权回调页:必须填写,内容填写任意符合uri规则字符串即可。
facebook:到https://developers.facebook.com/注册帐号并添加应用即可获取。
twitter:到https://apps.twitter.com/注册帐号并创建应用即可获取。

示例

public class ThirdLoginActivity extends Activity {
    @BindView(R.id.btnQQLogin)
    Button btnQQLogin;
    @BindView(R.id.btnQQLogout)
    Button btnQQLogout;
    @BindView(R.id.iv)
    ImageView iv;
    @BindView(R.id.tv)
    TextView tv;
    private QQLogin qqLogin;
    private WeixinLogin weixinLogin;
    private WeiboLogin weiboLogin;
    private BaiduLogin baiduLogin;
    private FacebookLogin facebookLogin;
    private TwitterLogin twitterLogin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle("第三方登录");
        setContentView(R.layout.activity_third_login);
        ButterKnife.bind(this);
        qqLogin = new QQLogin(this);
        weixinLogin = new WeixinLogin(this);
        weiboLogin = new WeiboLogin(this);
        baiduLogin = new BaiduLogin(this);
        facebookLogin = new FacebookLogin(this);
        twitterLogin = new TwitterLogin(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        qqLogin.logout();
        weixinLogin.onDestroy();
    }

    @OnClick({R.id.btnQQLogin, R.id.btnQQLogout, R.id.btnWxLogin, R.id.btnWbLogin, R.id.btnBdLogin, R.id.btnFbLogin, R.id.btnTwLogin})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btnQQLogin:
                qqLogin.login(this, callback);
                break;
            case R.id.btnQQLogout:
                iv.setImageBitmap(null);
                tv.setText("");
                btnQQLogin.setVisibility(View.VISIBLE);
                btnQQLogout.setVisibility(View.GONE);
                qqLogin.logout();
                break;
            case R.id.btnWxLogin:
                weixinLogin.login(this, callback);
                break;
            case R.id.btnWbLogin:
                weiboLogin.login(this, callback);
                break;
            case R.id.btnBdLogin:
                baiduLogin.login(this, callback);
                break;
            case R.id.btnFbLogin:
                facebookLogin.login(this, callback);
                break;
            case R.id.btnTwLogin:
                twitterLogin.login(this, callback);
                break;
        }
    }

    private LoginCallback callback = new LoginCallback() {
        @Override
        public void onSuccess(int loginType, final UserInfo userInfo, JSONObject origin) {
            if (loginType == qqLogin.loginType()) {
                btnQQLogin.setVisibility(View.GONE);
                btnQQLogout.setVisibility(View.VISIBLE);
            }
            tv.setText("");
            iv.setImageBitmap(null);
            tv.append("id: " + userInfo.id + "\n");
            tv.append("性别: " + userInfo.gender + "\n");
            tv.append("昵称: " + userInfo.nickname + "\n");
            tv.append("所在地: " + userInfo.location + "\n");
            tv.append("头像: " + userInfo.figureUrl + "\n\n");
            tv.append("原始数据\n");
            tv.append(origin.toString().replace(",", "\n"));
            if (!TextUtils.isEmpty(userInfo.figureUrl)) {
                new Thread() {
                    @Override
                    public void run() {
                        final Bitmap bitmap = ImageUtils.getNetBitmap(userInfo.figureUrl);
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                iv.setImageBitmap(bitmap);
                            }
                        });
                    }
                }.start();
            }
        }

        @Override
        public void onCancel() {
            showToast("用户取消");
        }

        @Override
        public void onError(int errorCode, String errorDetail) {
            showToast(errorDetail);
        }
    };

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        qqLogin.onActivityResult(requestCode, resultCode, data);
        weiboLogin.onActivityResult(requestCode, resultCode, data);
        facebookLogin.onActivityResult(requestCode, resultCode, data);
        twitterLogin.onActivityResult(requestCode, resultCode, data);
    }
}

源码:

核心公共部分:https://github.com/fszeng2011/thirdpartlogin-core
QQ:https://github.com/fszeng2011/thirdpartlogin-qq
微信:https://github.com/fszeng2011/thirdpartlogin-weixin
微博:https://github.com/fszeng2011/thirdpartlogin-weibo
百度:https://github.com/fszeng2011/thirdpartlogin-baidu
facebook:https://github.com/fszeng2011/thirdpartlogin-facebook
twitter:https://github.com/fszeng2011/thirdpartlogin-twitter

猜你喜欢

转载自blog.csdn.net/fszeng2011/article/details/78317632