qq_15855289的博客
免费直播:AI时代,机器学习如何入门?
程序员8月书讯
每周荐书:Java Web、Python极客编程(评论送书)
android使用友盟实现第三方登录、分享以及微信回调无反应问题解决办法
分类:
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
这里介绍微信和新浪登录。微信登录和新浪登录都需要申请第三方账号。可以参考官方文档http://dev.umeng.com/social/android/operation#2还是很清晰的。
新浪微博开放平台http://open.weibo.com/有账号就可以,经常刷微博的小伙伴可以直接登录喽,注意修改安全域名同时确保授权回调页与代码中配置一致。
登录微信开放平台https://open.weixin.qq.com/官网, 审核通过后获取到微信AppID及AppSecret(注意保存好,平台不会再显示忘了需要重置),需要微信登录功能,需要申请微信登录权限
获取微信登录权限需要收取一定费用,貌似300。一直没舍得,还好做项目的时候用到获得了,土豪随意
下面说代码实现
到友盟官网http://www.umeng.com/下载需要的SDK包。copy其中的jar包等到自己的项目中。
1、添加回调Activity
包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。这里注意一定是包名路径下。同理新浪微博也需要一个回调的Activity,与微信不同的是它只需要在包名目录下建立一个名为WBShareActivity类即可,不用建立文件夹,该类继承WBShareCallBackActivity
2、权限及其他maifest中的配置
<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.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
相关Activity注册
新浪微博:(精简版不需要)以下方式注册若无法find请把包名写全。
<activity android:name=".WBShareActivity" android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" > <intent-filter> <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser" android:configChanges="keyboardHidden|orientation" android:windowSoftInputMode="adjustResize" android:exported="false" > </activity> <service android:name="com.sina.weibo.sdk.net.DownloadService" android:exported="false"></service>
微信:
<activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
分享编辑页(只有新浪微博精简版,豆瓣人人腾讯微博需要):
<activity android:name="com.umeng.socialize.editorpage.ShareActivity" android:theme="@style/Theme.UMDefault" android:excludeFromRecents="true"/>
友盟Appkey及相关第三方key配置
在AndroidManifest.xml中设置友盟Appkey
<meta-data android:name="UMENG_APPKEY" android:value="561cae6ae0f55abd990035bf"> </meta-data>
3、在项目的application类中配置第三方信息
{
// <!-- 微信平台 --> appid appsecret
PlatformConfig.setWeixin("替换成自己appid","替换成自己的appsecret");
// <!-- 新浪微博 --> appkey appsecret
PlatformConfig.setSinaWeibo("替换成自己appid","替换成自己的appsecret");
Config.REDIRECT_URL = "新浪后台配置的回调地址";
// <!-- QQ、Qzone -->appid appkey
PlatformConfig.setQQZone("替换成自己appid","替换成自己的appsecret");
}
在application的oncreat方法中初始化
UMShareAPI.get(this);
4、登录实现
private UMShareAPI mShareAPI = null; private SHARE_MEDIA platform = null;
mShareAPI = UMShareAPI.get(this);
点击事件:
case R.id.login_img_weibo:
platform = SHARE_MEDIA.SINA;
mShareAPI.doOauthVerify(LoginActivity.this, platform,
umAuthListener);
break;
case R.id.login_img_weixin:
platform = SHARE_MEDIA.WEIXIN;
mShareAPI.doOauthVerify(LoginActivity.this, platform,
umAuthListener);
break;
下面new
umAuthListener
private UMAuthListener umAuthListener = new UMAuthListener() {
@Override
public void onComplete(SHARE_MEDIA platform, int action,
Map<String, String> data) {
if(platform == SHARE_MEDIA.WEIXIN){
//unionid:(6.2以前用unionid)uid
uid = data.get("unionid");
}else{
uid = data.get("uid");
}
if(!CheckUtils.isEmpty(uid)){
//如果uid不为空即回调授权成功,则可以调接口告诉后台此时的第三方uid,后台判断此唯一标识值是否存在即判断用户是否用
//第三方登录过,如果登录过直接进入主界面, 没有登录过则后台存储该值并进入注册界面进行手机号绑定注册
judgeUMLogin();,如果登录
}else{
Toast.makeText(getApplicationContext(), "暂无法使用该登录方式",
Toast.LENGTH_SHORT).show();
}
Toast.makeText(getApplicationContext(), "授权成功",
Toast.LENGTH_SHORT).show();
Log.d("user info", "user info:" + data.toString());
}
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText(getApplicationContext(), "Authorize fail",
Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText(getApplicationContext(), "Authorize cancel",
Toast.LENGTH_SHORT).show();
}
};
5、分享
回调相关配置
如果使用的是qq或者新浪精简版jar,需要在您使用分享或授权的Activity(fragment不行)中添加如下回调代码:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); }
分享相关代码调用
打开分享面板
可以通过如下代码打开分享面板选择页
new ShareAction(MainActivity.this) .withText("hello") .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN) .setCallback(umShareListener) .open();
其中umShareListener为回调监听,相关分享结果都在回调监听中获取
构建如下,其中分享成功会回调onComplete,取消分享回调onCancel,分享错误回调onError,对应的错误信息可以用过onError的Throwable参数来打印
private UMShareListener umShareListener = new UMShareListener() { @Override public void onResult(SHARE_MEDIA platform) { Log.d("plat","platform"+platform); Toast.makeText(MainActivity.this, platform + " 分享成功啦", Toast.LENGTH_SHORT).show(); } @Override public void onError(SHARE_MEDIA platform, Throwable t) { Toast.makeText(MainActivity.this,platform + " 分享失败啦", Toast.LENGTH_SHORT).show(); if(t!=null){ Log.d("throw","throw:"+t.getMessage()); } } @Override public void onCancel(SHARE_MEDIA platform) { Toast.makeText(MainActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show(); } };
直接分享接口
对于需要不经过分享面板选择页,直接通过按钮实现某个平台的分享跳转操作的开发者,可以调用下面的代码实现
new ShareAction(MainActivity.this) .setPlatform(SHARE_MEDIA.QQ) .withText("hello") .setCallback(umShareListener) .share();
具体分享结果获取方法与使用分享面板相同,这里不再复述
登录不回调可能的情况:
1、WXEntryActivity
这个类的路径问题
2、微信官网的配置要求很严格 程序目录的包名必须与配置文件的包名还有微信开放平台配置的包名完全一致。否则会出现回调无反应现象。(遇到过的)
3、微信未获取登录权限。(一般交钱审核通过就自动获取了登录权限)
- 顶
- 1
- 踩
- 0
- 上一篇android studio中矢量图的使用
- 下一篇前端开发基础学习笔记html标签
- ? 友盟社会化分享 ### 微信发送被拒绝 微信与朋友圈点击无响应
- ? SDCC 2017之大数据技术实战线上峰会
- ? Android微信、朋友圈分享回调函数无响应
- ? Hadoop大数据从入门到精通知识体系详解
- ? 微信分享配置回调Activity中android:exported=”true”的一个坑
- ? SDCC 2017之区块链技术实战线上峰会
- ? Android利用微信SDK分享到微信教程,回调分享结果错误解决和注意点
- ? C++跨平台开发和ffmpeg,opencv音视频技术
- ? Android利用微信SDK分享到微信教程,回调分享结果错误解决和注意点
- ? 史上最全Android基础知识总结
- ? 关于微信登录和友盟第三方微信登录那些坑
- ? 机器学习需要的数学知识
- ? 友盟之微信授权登陆总结(微信授权回调响应问题)
- ? getPackageInfo has exception: com.qzone getApn has exception: No permission to write
- ? umeng分享到QQ,分享成功,回调失败。
- ? QQ/QZONE 分享之后不回调的问题
-
个人资料
ZhDan91
- 访问:4248次
- 积分:218
- 等级:

- 排名:千里之外
- 原创:18篇
- 转载:0篇
- 译文:0篇
- 评论:1条
-
文章搜索
-
文章分类
- native app(11)
- 前端开发(4)
- 混合app(0)
- 测试(0)
-
文章存档
- 2017年05月(3)
- 2017年03月(6)
- 2017年02月(3)
- 2016年12月(3)
- 2015年09月(1)
-
阅读排行
- android使用友盟实现第三方登录、分享以及微信回调无反应问题解决办法(2327)
- android首次安装时进入wizard否则主界面Viewpager+Fragment+RadioGroup(296)
- 自定义dialog(212)
- android studio中矢量图的使用(157)
- httpclient客户端thread+handler+message(get)(146)
- android中百度定位、城市选择列表,右侧字母展示(135)
- 自己对于框架架构的学习思路(113)
- jar包的使用(maven依赖库)(112)
- Retrofit网络连接(101)
- Kotlin初步使用(91)
-
评论排行
- android使用友盟实现第三方登录、分享以及微信回调无反应问题解决办法(1)
- Kotlin初步使用(0)
- css样式基础学习笔记–形式和选择器(0)
- 前端开发基础学习笔记html标签(0)
- android中百度地图撒点标识后台附近的人坐标点及用户头像(0)
- android studio中矢量图的使用(0)
- 3D字母滑动选择城市列表(0)
- android中百度定位、城市选择列表,右侧字母展示(0)
- 自定义dialog(0)
- android首次安装时进入wizard否则主界面Viewpager+Fragment+RadioGroup(0)
-
推荐文章
- * CSDN日报20170828——《4个方法快速打造你的阅读清单》
- * Android检查更新下载安装
- * 动手打造史上最简单的 Recycleview 侧滑菜单
- * TCP网络通讯如何解决分包粘包问题
- * 程序员的八重境界
- * 四大线程池详解
-
最新评论
- android使用友盟实现第三方登录、分享以及微信回调无反应问题解决办法li1570608
目录视图
摘要视图
订阅
li1570608 2017-06-10 16:52发表 [回复]