常見的第三方登錄有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ù)了。