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

1.開(kāi)放平臺(tái)

新浪開(kāi)放平臺(tái)
百度開(kāi)放平臺(tái)
QQ開(kāi)放平臺(tái)

2.步驟

2.1新浪
1、注冊(cè)成為新浪微博開(kāi)發(fā)者,創(chuàng)建應(yīng)用,輸入基本信息。
2、在新浪第三登錄接口下,需要輸入packagename和apk簽名,調(diào)試程序時(shí),apk簽名為debug簽名,而發(fā)布之后,則會(huì)生成新的簽名指紋(ubuntu獲取簽名指紋命令:keytool -list -v -keystore 簽名路徑 -storepass 密碼),其中獲取md5簽名后,去除冒號(hào)并將大寫(xiě)字母變?yōu)樾?xiě)即可。
3、創(chuàng)建的應(yīng)用RedirectUrl這個(gè)字段的值就是我們后臺(tái)項(xiàng)目中的應(yīng)用信息——>高級(jí)信息——>OAuth2.0 授權(quán)設(shè)置中的授權(quán)回調(diào)頁(yè)這個(gè)字段,需要我們填寫(xiě)一個(gè)有效的地址,一般為:https://api.weibo.com/oauth2/default.html

2017-10-28 19-01-14屏幕截圖.png
(注:兩個(gè)地址要相同)
4.使用
4.1在項(xiàng)目的gradle文件下加入maven { url "https://dl.bintray.com/thelasterstar/maven/" }
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));
第三方應(yīng)用應(yīng)該使用自己的 APP_KEY 替換該 APP_KEY
建議使用默認(rèn)回調(diào)頁(yè) 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.同理注冊(cè)為開(kāi)發(fā)者
2.百度第三方登陸相對(duì)簡(jiǎn)單,無(wú)需填包名和簽名
3.下載baidusdk,倒入到工程中即可

baidu = new Baidu(clientId, LoginActivity.this);//client是分配給應(yīng)用的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.注冊(cè)成為開(kāi)發(fā)者并創(chuàng)建應(yīng)用
2.獲取id,下載qq sdk jar包即可

compile files('libs/open_sdk_r5886_lite.jar')

//qq
        // Tencent類(lèi)是SDK的主要實(shí)現(xiàn)類(lèi),開(kāi)發(fā)者可通過(guò)Tencent類(lèi)訪問(wèn)騰訊開(kāi)放的OpenAPI。
        // 其中APP_ID是分配給第三方應(yīng)用的appid,類(lèi)型為String。
        mTencent = Tencent.createInstance("1106499896", this.getApplicationContext());

        listener = new IUiListener(){
            @Override
            public void onComplete(Object o) {
                //"回調(diào)結(jié)果"

                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);
        }

源碼地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容