常见的第三方登录有QQ,微博,微信登录,今天记录一下集成微信登录的几个步骤。这里使用的是轮子哥的umeng库。
首先需要准备的当然是各种AppID,AppKey,AppSecret了。
1.先去友盟注册一个账号,https://passport.umeng.com/login。
2.注册成功之后添加自己的应用,拿到友盟appKey,这个会在代码集成的时候用到。

3.然后我们需要到微信的开放平台注册开放平台账号,注册成功之后登录到管理中心,创建自己的移动应用,移动应用签名信息的格式,我这里是数字和小写字母没有冒号,上传应用审核需要几个工作日的时间,所以如果有微信登录功能的话可以尽早上传。审核完成之后就可以拿到微信的AppID,AppSecret但要做微信登录的话只有这些还不行,我们还需要进行开发者资质认证,这一步需要公司的配合上传一些公司的资料还有300元的认证费用。完成到这一步之后就可以去写代码了。

4.使用umeng库的时候把gradle里面的implementation改成api,为的是让主app也可以使用libs里面的代码。

5.在包名的同级目录下创建WXEntryActivity.java

6.在主app的manifest.xml的application节点里面添加下面三个meta-data

在app的build.gradle文件中添加
android {
defaultConfig {
ndk {
// 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置
abiFilters 'armeabi'//,'armeabi-v7a'
}
}
buildTypes {
release {
minifyEnabled true
}
}
//全局配置文件
configurations.all {
}
lintOptions {
abortOnError false
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
// 执行配置
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;
// 友盟统计,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里面看到登录成功微信返回给我们的数据了。
附 友盟集成相关问题
网友评论