数码资讯
友盟之微信授权登陆总结(微信授权回调响应问题)
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
至于友盟注册以及开发使用,自行查看文档或者官网了。
微信平台:https://open.weixin.qq.com/
自行注册,以及申请开发者资质认证(需要300元)还有一系列注册需要的资料。通过这个后才有微信登录权限。
2、如果测试时候,如果已经多次登录微信。需要注销登录微信再进行测试。
3、测试的微信号一定要有微信号。最好也要有头像。
微信平台:https://open.weixin.qq.com/
自行注册,以及申请开发者资质认证(需要300元)还有一系列注册需要的资料。通过这个后才有微信登录权限。
应用的提交审核需要的资料,签名等,微信或者友盟都有资料介绍。或者参考我的上一篇博客写的新浪微博的:http://www.voidcn.com/article/p-gvbfdocd-nv.html。
一、微信回调的activity注册
<!-- 微信回调activity 一定要是app的package包名-->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
虽然友盟都建议,友盟开发包建成工程,最后引用这个这个友盟的工程。但这样做势必会造成引用这个工程的app包名跟 android:name=".wxapi.WXEntryActivity"这前面的包名不一样(app的包名+.wxapi.WXEntryActivity)而不是(友盟工程的包名+.wxapi.WXEntryActivity)。
所以这个空的WXEntryActivity还是要放在使用app的项目中,WXEntryActivity.class的完整路径应该是app的包名+.wxapi.WXEntryActivity。还有上面那个activity注册其他配置要一模一样。
这就是大多数人友盟的微信登陆回调没有用户信息返回的原因。就是没有执行到onComplete。
二、注意事项:
1、WXEntryActivity这个类里面什么都不用写。友盟帮我们写好了。就如下:
import com.umeng.socialize.weixin.view.WXCallbackActivity;
public class WXEntryActivity extends WXCallbackActivity {
}
2、如果测试时候,如果已经多次登录微信。需要注销登录微信再进行测试。
3、测试的微信号一定要有微信号。最好也要有头像。
三、下面看一下代码流程:
1、平台的注册,微信包加到平台
// 整个平台的Controller,负责管理整个SDK的配置、操作等处理
private UMSocialService mController = UMServiceFactory
.getUMSocialService("com.umeng.login");
private void addWXPlatform() {
// 注意:在微信授权的时候,必须传递appSecret
// wx967daebe835fbeac是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID
String appId = "wx.....";
String appSecret = "gdfg......";
// 添加微信平台
UMWXHandler wxHandler = new UMWXHandler(LoginActivity.this, appId,
appSecret);
wxHandler.setRefreshTokenAvailable(true);
wxHandler.addToSocialSDK();
}
2、微信登陆的调用与注销微信登陆
//登录微信调用 login(SHARE_MEDIA.WEIXIN); //注销微信登录 logout(SHARE_MEDIA.WEIXIN);
3、微信登陆与注销微信登陆整体代码,获取用户信息
/**
* 授权。如果授权成功,则获取用户信息
*
* @param platform
*/
private void login(final SHARE_MEDIA platform) {
mController.doOauthVerify(LoginActivity.this, platform,
new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA platform) {
Toast.makeText(LoginActivity.this, "授权开始",
Toast.LENGTH_SHORT).show();
}
@Override
public void onError(SocializeException e,
SHARE_MEDIA platform) {
Toast.makeText(LoginActivity.this, "授权失败",
Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(Bundle value, SHARE_MEDIA platform) {
Toast.makeText(LoginActivity.this, "授权完成",
Toast.LENGTH_LONG).show();
// 获取uid
String uid = value.getString("uid");
if (!TextUtils.isEmpty(uid)) {
// uid不为空,获取用户信息
getUserInfo(platform);
} else {
Toast.makeText(LoginActivity.this, "授权失败...",
Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(LoginActivity.this, "授权取消",
Toast.LENGTH_SHORT).show();
}
});
}
/**
* 获取用户信息
*
* @param platform
*/
private void getUserInfo(SHARE_MEDIA platform) {
mController.getPlatformInfo(LoginActivity.this, platform,
new UMDataListener() {
@Override
public void onStart() {
}
@Override
public void onComplete(int status, Map<String, Object> info) {
// String showText = "";
// if (status == StatusCode.ST_CODE_SUCCESSED) {
// showText = "用户名:" +
// info.get("screen_name").toString();
// Log.d("#########", "##########" + info.toString());
// } else {
// showText = "获取用户信息失败";
// }
if (info != null) {
Toast.makeText(LoginActivity.this, info.toString(),Toast.LENGTH_SHORT).show();
}
}
});
}
/**
* 注销本次登陆
* @param platform
*/
private void logout(final SHARE_MEDIA platform) {
mController.deleteOauth(LoginActivity.this, platform, new SocializeClientListener() {
@Override
public void onStart() {
}
@Override
public void onComplete(int status, SocializeEntity entity) {
String showText = "解除" + platform.toString() + "平台授权成功";
if (status != StatusCode.ST_CODE_SUCCESSED) {
showText = "解除" + platform.toString() + "平台授权失败[" + status + "]";
}
Toast.makeText(LoginActivity.this, showText, Toast.LENGTH_SHORT).show();
}
});
}
四、看图
到这里结束了,欢迎评论留下你的友盟开发之微信的疑问,我尽量帮你们解答。。。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。