admin管理员组文章数量:1573299
友盟集成了第三方登录,本给我们带来便利,但是文档只描述了集成方式,出现问题,发现还得自己各种baidu,这里总结自己遇到的一些坑,以防下次再踩。
友盟集成第三方微信登录:
友盟集成方案参考:http://dev.umeng/social/android/login-page#1
前期工作:微信账号开通开发者账号权限,在https://open.weixin.qq/上创建自己应用,获取到AppId和AppSecret。
1. 实现步骤
1.1 前期准备
将umeng_social_tool.jar, umeng_social_net.jar, umeng_social_api.jar三个jar包copy到工程的libs目录下。
在应用中添加权限
<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.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
1.2 平台配置,一般建议放在全局Application或者程序入口
{
PlatformConfig.setWeixin(AppConstant.WEIXIN_APPID, AppConstant.WEIXIN_APPSECRET);
PlatformConfig.setQQZone(AppConstant.QQ_APPID, AppConstant.QQ_KEY);
}
1.3 在应用包名.wxapi路径下建立WXEntryActivity类,并在AndroidMainfest.xml中注册
public class WXEntryActivity extends WXCallbackActivity {
}
AndroidMainfest.xml中注册,记得android:exported设置为”true”,我就是在这吃个亏,设置成false,结果在呼起微信端登录时,点击登录,不会回调WXEntryActivity,原因应该是微信第三方登录的进程和我们应用的进程不是同一个进程。
<!--微信-->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<!-- tencent,记得scheme后面的数字改成自己的appId -->
<activity
android:name="com.umeng.qq.tencent.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="tencent100424468"/>
</intent-filter>
</activity>
<activity
android:name="com.umeng.qq.tencent.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
1.4 第三方登录实现
platform中传入的SHARE_MEDIA.WEIXIN
private void loginByThree(SHARE_MEDIA platform) {
UMShareAPI.get(this).doOauthVerify(this, platform, authListener);
}
/**
* 第三方登录授权
*/
UMAuthListener authListener = new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA platform) {
LoadingDialog.showDialogForLoading(LoginActivity.this, getString(R.string.auth), true);
}
@Override
public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
LoadingDialog.cancelDialogForLoading();
if (platform == SHARE_MEDIA.WEIXIN) {
threeUserId = data.get("unionid");
} else {
threeUserId = data.get("uid");
}
access_token = data.get("access_token");
UMShareAPI.get(LoginActivity.this).getPlatformInfo(LoginActivity.this, platform, getInfoAuthListener);
}
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
showShortToast("失败:" + t.getMessage());
LoadingDialog.cancelDialogForLoading();
}
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
showShortToast("取消了");
LoadingDialog.cancelDialogForLoading();
}
};
UMAuthListener getInfoAuthListener = new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA platform) {
}
@Override
public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
String temp = "";
for (String key : data.keySet()) {
temp = temp + key + " : " + data.get(key) + "\n";
}
threeUserId = data.get("uid");
loginToServer();
}
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
showShortToast("错误" + t.getMessage());
}
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
showShortToast("取消" );
}
};
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
2. 遇到的坑
2.1 点击微信登录时,没有进入微信第三方页面
需要在微信平台上,将应用的包名和签名填入,并缴纳开放登录权限的费用(300元),注意如果放的relaese签名,在呼起WXEntryActivity应该是relase后的包。
或者你WXEntryActivity放置的位置不对,一定要在包名.wxapi路径下
2.2 点击微信登录后,没有回调WXEntryActivity和UMAuthListener
这可能是因为WXEntryActivity在AndroidMainfest.xml中注册时,android:exported没有设置成true
2.3 微信登录获取accessToken
在UMAuthListener authListener 的onComplete回调中
@Override
public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
String access_token = data.get("access_token");
UMShareAPI.get(LoginActivity.this).getPlatformInfo(LoginActivity.this, platform, getInfoAuthListener);
}
2.4 QQ应用非官方正版应用,请去应用宝下载正版后进行QQ登录(错误码:100044)
其实并不是咱们的应用没有在应用宝上传或是正版,因为我发现在应用中换成友盟的QQ的appid和appkey就行,但是换成自己应用的就不行,会出下面的错误
而换成能呼起下面的页面
至于这个问题,还没有找到原因,我觉得是我们注册的应用的问题。
版权声明:本文标题:友盟集成第三方登录--微信、QQ实现 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1727741323a1127664.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论