友盟集成第三方登录--微信、QQ实现
来源:互联网 发布:快递收发软件 编辑:程序博客网 时间:2024/06/05 01:04
友盟集成了第三方登录,本给我们带来便利,但是文档只描述了集成方式,出现问题,发现还得自己各种baidu,这里总结自己遇到的一些坑,以防下次再踩。
友盟集成第三方微信登录:
友盟集成方案参考:http://dev.umeng.com/social/android/login-page#1
前期工作:微信账号开通开发者账号权限,在https://open.weixin.qq.com/上创建自己应用,获取到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实现
- 集成友盟第三方登录(qq、微信、微信朋友圈、新浪)、分享
- 友盟集成QQ第三方登录
- 友盟第三方登录实现QQ和微信登录
- 第三方登录-[微博、微信、qq] java实现
- TP框架实现第三方登录(QQ/微信)
- QQ 微信 第三方登录 分享
- QQ微信第三方登录
- 微信第三方登录集成
- 微信第三方登录集成
- 集成QQ第三方登录
- 最近也集成了QQ,微信第三方登录,一些坑总结都在这
- 友盟集成第三方步骤(微信、QQ、微博)
- 友盟集成第三方步骤(微信、QQ、微博)
- Android使用友盟集成QQ、微信、微博等第三方登录
- Android使用友盟集成QQ、微信、微博等第三方登录
- 友盟第三方登录 QQ 微信 新浪微博 自定义友盟的dirlog
- QQ实现第三方登录
- Firefox浏览器的控制台打印对象如何展示该对象的全部属性?
- 程序编写规范
- javaDAO模式学习总结
- java冒泡排序
- Ubuntu14.04解决laravel5.4关于URL重写的问题
- 友盟集成第三方登录--微信、QQ实现
- java电子商务源码 b2b2c o2o
- 学习笔记--单向链表
- HDU2896 病毒侵袭(AC自动机)
- Greendao 查询不到真实数据的解决方法 清除greendao缓存
- 创建虚拟环境
- 文章标题
- LINUX,WWW,CHMOD,CHOWN
- JAVA异常:Exception in thread "http-8080-2" java.lang.OutOfMemoryError: PermGen space