新浪、百度、qq第三方登录

1.开放平台

新浪开放平台
百度开放平台
QQ开放平台

2.步骤

2.1新浪
1、注册成为新浪微博开发者,创建应用,输入基本信息。
2、在新浪第三登录接口下,需要输入packagename和apk签名,调试程序时,apk签名为debug签名,而发布之后,则会生成新的签名指纹(ubuntu获取签名指纹命令:keytool -list -v -keystore 签名路径 -storepass 密码),其中获取md5签名后,去除冒号并将大写字母变为小写即可。
3、创建的应用RedirectUrl这个字段的值就是我们后台项目中的应用信息——>高级信息——>OAuth2.0 授权设置中的授权回调页这个字段,需要我们填写一个有效的地址,一般为:https://api.weibo.com/oauth2/default.html

新浪、百度、qq第三方登录_第1张图片
2017-10-28 19-01-14屏幕截图.png
(注:两个地址要相同)
4.使用
4.1在项目的gradle文件下加入maven { url " https://dl.bintray.com/thelasterstar/maven/" }
新浪、百度、qq第三方登录_第2张图片
2017-10-28 19-08-38屏幕截图.png

并且在app gradle下加入//微博sdk

compile 'com.sina.weibo.sdk:core:2.0.3:openDefaultRelease@aar'
compile files('libs/android-support-v4.jar')

在application入口初始化如下代码

WbSdk.install(this,new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL,Constants.SCOPE));
第三方应用应该使用自己的 APP_KEY 替换该 APP_KEY
建议使用默认回调页 String REDIRECT_URL = "https://api.weibo.com/oauth2/default.html";

//sina
        mSsoHandler = new SsoHandler(this);

        mSsoHandler.authorize(new com.sina.weibo.sdk.auth.WbAuthListener(){
            @Override
            public void onSuccess(final Oauth2AccessToken token) {
                LoginActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mAccessToken = token;
                        if (mAccessToken.isSessionValid()) {
                            // 显示 Token
//                        updateTokenView(false);
                            // 保存 Token 到 SharedPreferences
                            AccessTokenKeeper.writeAccessToken(LoginActivity.this, mAccessToken);

                            SPUtils.setSharedBooleanData(LoginActivity.this,"isLogin",true);
                            SPUtils.setSharedlongData(LoginActivity.this,"deadline", System.currentTimeMillis()+7*24*60*60*1000);

                            Toast.makeText(LoginActivity.this,
                                    R.string.weibosdk_demo_toast_auth_success, Toast.LENGTH_SHORT).show();

                            Intent intent = new Intent(LoginActivity.this,MainActivity.class);
                            intent.putExtra("sina",true);
                            intent.putExtra("loginWay",1);
                            LoginActivity.this.startActivity(intent);
                            LoginActivity.this.finish();
                        }
                    }
                });
            }

            @Override
            public void cancel() {
                Toast.makeText(LoginActivity.this,
                        R.string.weibosdk_demo_toast_auth_canceled, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onFailure(WbConnectErrorMessage errorMessage) {
                Toast.makeText(LoginActivity.this, errorMessage.getErrorMessage(), Toast.LENGTH_LONG).show();
            }
        });

3.1百度
1.同理注册为开发者
2.百度第三方登陆相对简单,无需填包名和签名
3.下载baidusdk,倒入到工程中即可

baidu = new Baidu(clientId, LoginActivity.this);//client是分配给应用的id  

        baidu.authorize(LoginActivity.this, isForceLogin,isConfirmLogin,new BaiduDialog.BaiduDialogListener() {

            @Override
            public void onComplete(Bundle values) {

                new Thread(){
                    @Override
                    public void run() {
                        String json = "你好";
                        try {
                            json = baidu.request("https://openapi.baidu.com/rest/2.0/passport/users/getInfo", null, "GET");

                        } catch (IOException e) {
                            e.printStackTrace();
                        } catch (BaiduException e) {
                            e.printStackTrace();
                        }

                        final String finalJson = json;
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Util.logd("线程", Thread.currentThread()+"");
                                if (finalJson != null) {

                                    SPUtils.setSharedBooleanData(LoginActivity.this,"isLogin",true);
                                    SPUtils.setSharedlongData(LoginActivity.this,"deadline", System.currentTimeMillis()+7*24*60*60*1000);

                                    Gson gson = new Gson();
                                    BaiduLoginBean baiduLoginBean = gson.fromJson(finalJson, BaiduLoginBean.class);

                                    Intent intent = new Intent(LoginActivity.this,MainActivity.class);
                                    intent.putExtra("baidu", (Serializable) baiduLoginBean);
                                    intent.putExtra("loginWay",2);
                                    LoginActivity.this.startActivity(intent);
                                    LoginActivity.this.finish();
                                }
                            }
                        });

                    }
                }.start();


            }

            @Override
            public void onBaiduException(BaiduException e) {

            }

            @Override
            public void onError(BaiduDialogError e) {

            }

            @Override
            public void onCancel() {

            }
        });

4.1QQ
1.注册成为开发者并创建应用
2.获取id,下载qq sdk jar包即可

compile files('libs/open_sdk_r5886_lite.jar')

//qq
        // Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
        // 其中APP_ID是分配给第三方应用的appid,类型为String。
        mTencent = Tencent.createInstance("1106499896", this.getApplicationContext());

        listener = new IUiListener(){
            @Override
            public void onComplete(Object o) {
                //"回调结果"

                SPUtils.setSharedBooleanData(LoginActivity.this,"isLogin",true);
                SPUtils.setSharedlongData(LoginActivity.this,"deadline", System.currentTimeMillis()+7*24*60*60*1000);

                Gson gson = new Gson();
                QQLoginBean qqLoginBean = gson.fromJson(o.toString(), QQLoginBean.class);

                Intent intent = new Intent(LoginActivity.this,MainActivity.class);
                intent.putExtra("qq", (Serializable) qqLoginBean);
                intent.putExtra("loginWay",3);
                LoginActivity.this.startActivity(intent);
                LoginActivity.this.finish();
            }

            @Override
            public void onError(UiError e) {
                Util.logd("onError:", "code:" + e.errorCode + ", msg:"
                        + e.errorMessage + ", detail:" + e.errorDetail);

            }

            @Override
            public void onCancel() {
                Util.logd("cancel","");
            }
        };

        if (!mTencent.isSessionValid())
        {
            mTencent.login(this, "all", listener);
        }

源码地址

你可能感兴趣的:(新浪、百度、qq第三方登录)