常見的第三方登錄有QQ,微博,微信登錄浑槽,今天記錄一下集成微信登錄的幾個步驟譬猫。這里使用的是輪子哥的umeng庫焙畔。
首先需要準備的當然是各種AppID,AppKey,AppSecret了县遣。
1.先去友盟注冊一個賬號虱咧,https://passport.umeng.com/login贡未。
2.注冊成功之后添加自己的應用种樱,拿到友盟appKey,這個會在代碼集成的時候用到。
3.然后我們需要到微信的開放平臺注冊開放平臺賬號俊卤,注冊成功之后登錄到管理中心嫩挤,創(chuàng)建自己的移動應用,移動應用簽名信息的格式消恍,我這里是數(shù)字和小寫字母沒有冒號岂昭,上傳應用審核需要幾個工作日的時間,所以如果有微信登錄功能的話可以盡早上傳狠怨。審核完成之后就可以拿到微信的AppID约啊,AppSecret但要做微信登錄的話只有這些還不行,我們還需要進行開發(fā)者資質認證佣赖,這一步需要公司的配合上傳一些公司的資料還有300元的認證費用棍苹。完成到這一步之后就可以去寫代碼了。
4.使用umeng庫的時候把gradle里面的implementation改成api茵汰,為的是讓主app也可以使用libs里面的代碼枢里。
5.在包名的同級目錄下創(chuàng)建WXEntryActivity.java
6.在主app的manifest.xml的application節(jié)點里面添加下面三個meta-data
在app的build.gradle文件中添加
android {
defaultConfig {
ndk {
// 設置支持的 SO 庫構架,注意這里要根據(jù)你的實際情況來設置
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", "申請的友盟appKey") // 友盟 AppKey
//.replaceAll("QQ_APPID_VALUE", "100424468") // QQ AppId
//.replaceAll("QQ_APPKEY_VALUE", "c7394704798a158208a74ab60104f0ba") // QQ Key
.replaceAll("WX_APPID_VALUE", "申請的微信AppID") // 微信 AppId
.replaceAll("WX_APPKEY_VALUE", "申請的微信AppSecret") // 微信 Key
new File(manifestFile).write(updatedContent, 'UTF-8')
}
}
}
在App.java中對UmengClient初始化
@Override
public void onCreate() {
super.onCreate();
initUmeng();
}
/**
* 第三方登錄
*/
private void initUmeng() {
UmengClient.init(this);
}
看一下UmengClient.java的init方法下面做了什么
/**
* 初始化友盟相關 SDK
*/
public static void init(Application application) {
try {
Bundle metaData = application.getPackageManager().getApplicationInfo(application.getPackageName(), PackageManager.GET_META_DATA).metaData;
// 友盟統(tǒng)計蹂午,API 說明:https://developer.umeng.com/docs/66632/detail/101814#h1-u521Du59CBu5316u53CAu901Au7528u63A5u53E32
UMConfigure.init(application, UMConfigure.DEVICE_TYPE_PHONE, "");
// 初始化各個平臺的 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();
}
}
完成到這一步之后我們就一個到登錄界面使用微信登錄的方式了
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);
// 友盟登錄回調
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) {
// 判斷第三方登錄的平臺
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("授權成功");
}
@Override
public void onError(Platform platform, Throwable t) {
Log.i("login onError", "onError: " + t.getMessage());
showToast("授權失敗");
}
@Override
public void onCancel(Platform platform) {
showToast("授權取消");
}
}
這么一來不出意外的話我們就能在onSucceed里面看到登錄成功微信返回給我們的數(shù)據(jù)了栏豺。
附 友盟集成相關問題