友盟之微信授权登陆总结(微信授权回调响应问题)

至于友盟注册以及开发使用,自行查看文档或者官网了。
微信平台:https://open.weixin.qq.com/
自行注册,以及申请开发者资质认证(需要300元)还有一系列注册需要的资料。通过这个后才有微信登录权限。

应用的提交审核需要的资料,签名等,微信或者友盟都有资料介绍。或者参考我的上一篇博客写的新浪微博的:http://blog.csdn.net/qq_16064871/article/details/50083807。

一、微信回调的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张图片


二、注意事项:

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();
			}
		});
	}

四、看图


友盟之微信授权登陆总结(微信授权回调响应问题)_第2张图片


友盟之微信授权登陆总结(微信授权回调响应问题)_第3张图片


到这里结束了,欢迎评论留下你的友盟开发之微信的疑问,我尽量帮你们解答。。。


你可能感兴趣的:(新浪微博,回调,微信,应用,友盟)