android[友盟+第三方登錄微信登錄]

常見的第三方登錄有QQ,微博,微信登錄,今天記錄一下集成微信登錄的幾個(gè)步驟。這里使用的是輪子哥的umeng庫。
首先需要準(zhǔn)備的當(dāng)然是各種AppID,AppKey,AppSecret了。
1.先去友盟注冊(cè)一個(gè)賬號(hào),https://passport.umeng.com/login
2.注冊(cè)成功之后添加自己的應(yīng)用,拿到友盟appKey,這個(gè)會(huì)在代碼集成的時(shí)候用到。

appKey

3.然后我們需要到微信的開放平臺(tái)注冊(cè)開放平臺(tái)賬號(hào),注冊(cè)成功之后登錄到管理中心,創(chuàng)建自己的移動(dòng)應(yīng)用,移動(dòng)應(yīng)用簽名信息的格式,我這里是數(shù)字和小寫字母沒有冒號(hào),上傳應(yīng)用審核需要幾個(gè)工作日的時(shí)間,所以如果有微信登錄功能的話可以盡早上傳。審核完成之后就可以拿到微信的AppID,AppSecret但要做微信登錄的話只有這些還不行,我們還需要進(jìn)行開發(fā)者資質(zhì)認(rèn)證,這一步需要公司的配合上傳一些公司的資料還有300元的認(rèn)證費(fèi)用。完成到這一步之后就可以去寫代碼了。
AppID,AppSecret

4.使用umeng庫的時(shí)候把gradle里面的implementation改成api,為的是讓主app也可以使用libs里面的代碼。
umeng build.gradle

5.在包名的同級(jí)目錄下創(chuàng)建WXEntryActivity.java
位置

6.在主app的manifest.xml的application節(jié)點(diǎn)里面添加下面三個(gè)meta-data
友盟 微信meta-data

在app的build.gradle文件中添加

android {
    defaultConfig {
        ndk {
            // 設(shè)置支持的 SO 庫構(gòu)架,注意這里要根據(jù)你的實(shí)際情況來設(shè)置
            abiFilters 'armeabi'//,'armeabi-v7a'
        }
    }
    buildTypes {
        release {
            minifyEnabled true
        }
    }
    //全局配置文件
    configurations.all {
    }
    lintOptions {
        abortOnError false
    }
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
    // 執(zhí)行配置
    applicationVariants.all { variant ->
        // AndroidManifest 輸出配置
        variant.outputs[0].processManifest.doLast {
            def manifestFile = "${manifestOutputDirectory}/AndroidManifest.xml"
            def updatedContent = new File(manifestFile).getText('UTF-8')
                    .replaceAll("UMENG_APPKEY_VALUE", "申請(qǐng)的友盟appKey") // 友盟 AppKey
            //.replaceAll("QQ_APPID_VALUE", "100424468") // QQ AppId
            //.replaceAll("QQ_APPKEY_VALUE", "c7394704798a158208a74ab60104f0ba") // QQ Key
                    .replaceAll("WX_APPID_VALUE", "申請(qǐng)的微信AppID") // 微信 AppId
                    .replaceAll("WX_APPKEY_VALUE", "申請(qǐng)的微信AppSecret") // 微信 Key
            new File(manifestFile).write(updatedContent, 'UTF-8')
        }
    }

}

在App.java中對(duì)UmengClient初始化

    @Override
    public void onCreate() {
        super.onCreate();
        initUmeng();
    }
    /**
     * 第三方登錄
     */
    private void initUmeng() {
        UmengClient.init(this);
    }

看一下UmengClient.java的init方法下面做了什么

/**
 * 初始化友盟相關(guān) SDK
 */
public static void init(Application application) {
    try {
        Bundle metaData = application.getPackageManager().getApplicationInfo(application.getPackageName(), PackageManager.GET_META_DATA).metaData;
        // 友盟統(tǒng)計(jì),API 說明:https://developer.umeng.com/docs/66632/detail/101814#h1-u521Du59CBu5316u53CAu901Au7528u63A5u53E32
        UMConfigure.init(application, UMConfigure.DEVICE_TYPE_PHONE, "");
        // 初始化各個(gè)平臺(tái)的 Key
        PlatformConfig.setWeixin(String.valueOf(metaData.get("WX_APPID")), String.valueOf(metaData.get("WX_APPKEY")));
        //PlatformConfig.setQQZone(String.valueOf(metaData.get("QQ_APPID")), String.valueOf(metaData.get("QQ_APPKEY")));
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
}

完成到這一步之后我們就一個(gè)到登錄界面使用微信登錄的方式了

public class LoginActivity extends Activity implements UmengLogin.OnLoginListener {
    @Override
    public int getLayoutId() {
        return R.layout.act_login;
    }
    @Override
    public void initViews(Bundle bundle) {
        loginViaQQ.setOnClickListener(v -> {
            //UmengClient.login(this, Platform.QQ, this);
        });
        loginViaWX.setOnClickListener(v -> UmengClient.login(this, Platform.WECHAT, this));
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 友盟登錄回調(diào)
        UmengClient.onActivityResult(this, requestCode, resultCode, data);
    }

    @Override
    public void onStart(Platform platform) {
        Log.i("login", "start:");
    }

    @Override
    public void onSucceed(Platform platform, UmengLogin.LoginData data) {
        // 判斷第三方登錄的平臺(tái)
        switch (platform) {
            case QQ:
                break;
            case WECHAT:
                break;
            default:
                break;
        }
        Log.i("login", "昵稱:" + data.getName());
        Log.i("login", "性別:" + data.getSex());
        Log.i("login", "id:" + data.getId());
        Log.i("login", "token:" + data.getToken());
        Log.i("login", "頭像:" + data.getIcon());
        showToast("授權(quán)成功");
    }

    @Override
    public void onError(Platform platform, Throwable t) {
        Log.i("login onError", "onError: " + t.getMessage());
        showToast("授權(quán)失敗");
    }

    @Override
    public void onCancel(Platform platform) {
        showToast("授權(quán)取消");
    }
}

這么一來不出意外的話我們就能在onSucceed里面看到登錄成功微信返回給我們的數(shù)據(jù)了。

友盟集成相關(guān)問題

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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