1. 程式人生 > >Android ShareSDKQQ 第三方登錄so easy?

Android ShareSDKQQ 第三方登錄so easy?

實現 water == launch fmt tope 記錄 .text expire

昨天群裏有個群友看到我之前做的那個qq第三方登錄怎麽做的,於是乎思考了一下,還是決定寫一篇博客記錄下。事實上都不難的,事實上之前我又寫到FaceBook的第三方登錄不知道看下這Android集成FaceBook登入《-》 今天僅僅舉例QQ登錄其它像微信大同小異須要微信工具簽名然後md5+包名等。

開車啦

技術分享

準備工作須要下載ShareSDK這裏我不再贅述不知道的看我的這篇文章ShareSDK社會化分享之那些年我們踩過的坑我這裏不再贅述由於非常多步驟是反復的。

然後在項目project中assets文件下改動ShareSDK.xml文件更改您的Appkey

技術分享

然後QQ第三方登錄準備的Jar點擊直接下載opensdk
然後解壓將jar放到project中的libs中例如以下圖所看到的

技術分享

1、申請appid和appkey的用途

appid :應用的唯一標識。

在OAuth2.0認證過程中。appid的值即為oauth_consumer_key的值。

appkey:appid相應的密鑰,訪問用戶資源時用來驗證應用的合法性。在OAuth2.0認證過程中。appkey的值即為oauth_consumer_secret的值。

技術分享

2、配置清單文件AndroidMainfest.xml
2.1加入相關權限

<!-- 加入權限 -->
 <uses-permission android:name="android.permission.GET_TASKS" />
 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <!-- 藍牙分享所需的權限 --> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
            <activity
            android:name="com.mob.tools.MobUIShell"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:windowSoftInputMode="stateHidden|adjustResize">

2.2微信授權回調

<!--微信分享回調 -->
           <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

2.3註冊Activity

  <!-- 註冊SDKActivity -->
           <activity
            android:name="com.tencent.tauth.AuthActivity"
            android:launchMode="singleTask"
            android:noHistory="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="tencent1105658914" /> <!-- 開放平臺獲取的APPID -->
            </intent-filter>
        </activity>
         <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <activity android:name=".bdmap.BMapActivity" />

3、代碼簡單實現

聲明變量

    private Tencent mTencent;
    private BaseUiListener mIUiListener;
    private UserInfo mUserInfo;
    private CallbackManager  mCallBackManager;

SDK初始化這個大多數都會有須要註意的這裏是傳入getApplicationContext

  mTencent=Tencent.createInstance(AppConstant.APP_ID,LoginActivity.this.getApplicationContext());

3.1 QQ登錄授權接口回調


    public void QQLogin(View v) {
        mIUiListener = new BaseUiListener();
        //all表示獲取全部權限
        mTencent.login(LoginActivity.this,"all", mIUiListener);
        //授權成功後跳轉到引導頁面
        startActivity(new Intent(LoginActivity.this,WelcomeGuideActivity.class));
    }

3.2自己定義監聽器實現IUiListener接口後,須要實現的3個方法 onComplete完畢 onError錯誤 onCancel取消

    /**
     * 自己定義監聽器實現IUiListener接口後。須要實現的3個方法
     * onComplete完畢 onError錯誤 onCancel取消
     */
    private class BaseUiListener implements IUiListener{

        @Override
        public void onComplete(Object response) {
            Toast.makeText(LoginActivity.this, "授權成功", Toast.LENGTH_SHORT).show();
            Log.e(TAG, "response:" + response);
            JSONObject obj = (JSONObject) response;
            try {
                String openID = obj.getString("openid");
                String accessToken = obj.getString("access_token");
                String expires = obj.getString("expires_in");
                mTencent.setOpenId(openID);
                mTencent.setAccessToken(accessToken,expires);
                QQToken qqToken = mTencent.getQQToken();
                mUserInfo = new UserInfo(getApplicationContext(),qqToken);
                mUserInfo.getUserInfo(new IUiListener() {
                    @Override
                    public void onComplete(Object response) {
                        Log.e(TAG,"登錄成功"+response.toString());
                    }

                    @Override
                    public void onError(UiError uiError) {
                        Log.e(TAG,"登錄失敗"+uiError.toString());
                    }

                    @Override
                    public void onCancel() {
                        Log.e(TAG,"登錄取消");

                    }
                });
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        @Override
        public void onError(UiError uiError) {
            Toast.makeText(LoginActivity.this, "授權失敗", Toast.LENGTH_SHORT).show();

        }

        @Override
        public void onCancel() {
            Toast.makeText(LoginActivity.this, "授權取消", Toast.LENGTH_SHORT).show();

        }


    }

3.3在調用Login的Activity或者Fragment中重寫onActivityResult方法

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == Constants.REQUEST_LOGIN){
            Tencent.onActivityResultData(requestCode,resultCode,data,mIUiListener);
        }
               super.onActivityResult(requestCode, resultCode, data);
    }

總結:

整個流程例如以下圖所看到的

技術分享

效果例如以下圖所看到的360高清無碼正在載入中別眨眼!

為了做個這東西把自己QQ都賣了我easy嗎?我沒辦法老司機!


技術分享

轉載請註明出處同一時候歡迎大家加我的群號。歡迎開車,自己能夠去嘗試做一下我這裏可能也不是非常完整。最好建議大家去管網看文檔!

應該是沒問題的!

我這人有一點不好不喜歡拖拉!喜歡的事情就去做!

由於年輕!

由於任性!由於代碼是敲出來的!

還記得我有個群友代碼9.99評分豆瓣棒棒噠!

來個合照

idkey=74044aec4b56f4a3528a19a40ffb830db1cbfbdb3831b1d0624416ac34175169" target="_blank">技術分享

Android ShareSDKQQ 第三方登錄so easy?