1. 程式人生 > >使用友盟+實現第三方登入

使用友盟+實現第三方登入

最近專案中有使用到友盟第三方登入:下面我就把使用友盟第三方登入的步驟分享給大家:

1.第一步:去友盟+官網建立應用,申請獲取到appkey。有賬號的話直接登入建立即可,無賬號註冊一個建立應用。

友盟+appkey

2.第二步:確定可以使用第三方登入的平臺。(我這裡實現QQ、微信和新浪微博)。

3.第三步:去騰訊開放平臺申請APP ID 和 APP KEY。步驟和第一步一樣的,建立應用。

這裡寫圖片描述

4.第四步:去微信開放平臺申請AppID 和 AppSecret。(他這裡有個坑,就是一定要是管理員身份的微信掃描二維碼才能生成)。

這裡寫圖片描述

5.第五步:去新浪微博開放平臺申請App Key 和 App Secret在高階資訊中設定回撥url。

這裡寫圖片描述

這些步驟全部完成之後,開始初始化友盟sdk的步驟了。

6.下載友盟社會化分享的sdk:把jar包全部匯入工程中去。

下載完成解壓後出現如下所示:
這裡寫圖片描述

雙擊中間的share資料夾:

這裡寫圖片描述

雙擊友盟整合工具:

這裡寫圖片描述

點選OK,彈出框點選是:

這裡寫圖片描述

會發現多出來一個資料夾:

這裡寫圖片描述

如上所示把lib中的jar包全部匯入專案中去

7.在app中的build.gradle中新增依賴:

compile 'com.umeng.sdk:common:latest.integration'

還需要加入:

allprojects {
        repositories {
            mavenCentral()
        }
}

(混淆規則)

-keep class com.umeng.commonsdk.** {*;}

8.在工程的Application中的onCreate()方法中加入以下程式碼:

UMConfigure.init(this, "友盟+的appkey", "Shutang", UMConfigure.DEVICE_TYPE_PHONE, "");//最後一個引數為推送時需要用到的
        UMShareAPI.get(this);
        Config.DEBUG = true;
        QueuedWork.isUseThreadPool = false
; //三方獲取使用者資料時是否每次都要進行授權 UMShareConfig config = new UMShareConfig(); config.isNeedAuthOnGetUserInfo(true); UMShareAPI.get(this).setShareConfig(config); PlatformConfig.setWeixin("微信的AppID", "微信的AppSecret"); PlatformConfig.setQQZone("騰訊的APP ID", "騰訊的APP KEY"); PlatformConfig.setSinaWeibo("新浪微博的App Key", "新浪微博的App Secret", "新浪微博的回撥url");

9.在專案的清單檔案中新增許可權:

<!--友盟的許可權 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

10.在包名的資料夾直屬目錄下建立一個wxapi包,然後在包中建立一個:

例子:
這裡寫圖片描述

package com.stinfo.app.wxapi;

import com.umeng.socialize.weixin.view.WXCallbackActivity;

/**
 * Created by DFF on 2018/3/31.
 */

public class WXEntryActivity extends WXCallbackActivity{
}

11.在清單檔案中註冊回撥的Activity:

<!-- 微信 -->
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <!--新浪-->
        <activity
            android:name="com.umeng.socialize.media.WBShareCallBackActivity"
            android:configChanges="keyboardHidden|orientation"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:exported="false"
            android:launchMode="singleTask"
            android:screenOrientation="portrait" >
        </activity>

        <activity
            android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
            android:launchMode="singleTask"
            android:name="com.sina.weibo.sdk.share.WbShareTransActivity">
            <intent-filter>
                <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

        </activity>
        <!-- qq精簡版 -->
        <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="tencentappid" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <!-- 分享編輯頁 -->
        <activity
            android:name="com.umeng.socialize.editorpage.ShareActivity"
            android:excludeFromRecents="true"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

        <activity android:name=".StartActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

12.在登入介面,也就是去獲取授權的介面中重寫onActivityResult()方法:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);

}

以上初始化就基本上完成了:

現在是使用階段:

此處是我登入介面的點選事件:

case R.id.other_weibo_login://新浪微博登入
                UMSharePlatform.loginThirdParty(this, SHARE_MEDIA.SINA, new UMSharePlatform.LoginSuccessCallback() {
                    @Override
                    public void getLoginData(String uid) {
                        mLoginPresenter.thirdPartyLoad(uid, "3");
                    }
                });
                break;
            case R.id.other_qq_login://QQ登入
                UMSharePlatform.loginThirdParty(this, SHARE_MEDIA.QQ, new UMSharePlatform.LoginSuccessCallback() {
                    @Override
                    public void getLoginData(String uid) {
                        mLoginPresenter.thirdPartyLoad(uid, "2");
                    }
                });
                break;
            case R.id.other_weixin_login://微信登入
                UMSharePlatform.loginThirdParty(this, SHARE_MEDIA.WEIXIN, new UMSharePlatform.LoginSuccessCallback() {
                    @Override
                    public void getLoginData(String uid) {
                        mLoginPresenter.thirdPartyLoad(uid, "1");
                    }
                });
                break;

這是我封裝得回撥邏輯:

public class UMSharePlatform {
    /**
     * 第三方登入
     *
     * @param activity
     * @param media
     * @param callback
     */
    public static void loginThirdParty(Activity activity, SHARE_MEDIA media, final LoginSuccessCallback callback) {
        UMShareAPI.get(activity).getPlatformInfo(activity, media, new UMAuthListener() {
            @Override
            public void onStart(SHARE_MEDIA share_media) {
                Log.e("lee", "onStart授權開始: ");
            }

            @Override
            public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
                callback.getLoginData(map.get("uid"));
                //在該回調的map中可以拿到第三方返回的好多資訊:比如暱稱,頭像,性別等等,由於我這裡只需要uid所以就只取了uid。
                Log.e("lee", "onComplete授權成功: ");
            }

            @Override
            public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
                Log.e("lee", "onError授權異常: ");
            }

            @Override
            public void onCancel(SHARE_MEDIA share_media, int i) {
                Log.e("lee", "onCancel授權取消: ");
            }
        });
    }

    /**
     * 回撥介面
     */
    public interface LoginSuccessCallback {
        /**
         * @param uid 第三方平臺返回的唯一標識
         */
        void getLoginData(String uid);
    }
}
mLoginPresenter.thirdPartyLoad(uid, "1");這些程式碼就是呼叫我們自己的伺服器的登入介面。

以上就完成了友盟+的第三方登入。