一、去微信开放平台的管理中心申请移动设备的审核(需进行开发者资质认证,每年300元)
1、获取应用的签名
2、在微信开放平台申请移动应用
两个注意点:①签名要填对 ②应用的包名要写对(tips: com.**.**)
在应用通过审核后,拿到了AppId和AppSecret,这样我们具备了和微信授权登录的基本条件。
二、导入友盟的第三方登录的jar包和资源
jar需要4个:
httpmime-4.1.3.jar SocialSDK_WeiXin_1.jar SocialSDK_WeiXin_2.jar umeng_social_sdk.jar
三。在AndroidMenafest.xml中配置微信登录信息:
<!-- 微信回调activity --> <activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
四.创建WXEntryActivity.java微信接收响应
WXEntryActivity是一个Activity,用来接收微信的响应信息。这里有几个需要注意的地方:
- 它必须在"包名.wxapi"这个包下,如:你的应用包名为:com.lqr.test,则WXEntryActivity所在的包名必须为com.lqr.test.wxapi。
- 创建后在AndroidManifest.xml文件中对WXEntryActivity进行设置:android:exported="true"。
- <activity android:name=".wxapi.WXEntryActivity" android:exported="true" />
- WXEntryActivity.Java继承自WXCallbackActivity
package com.haier.uhome.appliance.wxapi; import com.umeng.socialize.weixin.view.WXCallbackActivity; public class WXEntryActivity extends WXCallbackActivity { }
五、微信授权登录
/** * @功能描述 : 添加微信平台授权登录 * @return */ private void addWXPlatform() { // 注意:在微信授权的时候,必须传递appSecret mController = UMServiceFactory.getUMSocialService("com.umeng.login"); // 添加微信平台,APP_ID、APP_SECRET都是在微信开放平台,移动应用通过审核后获取到的 UMWXHandler wxHandler = new UMWXHandler(LoginActivity.this, APP_ID, APP_SECRET); //微信授权页面每次都出现,便于切换微信用户 wxHandler.setRefreshTokenAvailable(false); wxHandler.addToSocialSDK(); }
微信登录返回的用户信息:{"sex":2,"nickname":"****","unionid":"oGF9Wv3jsg******","privilege":[],"province":"Shandong","openid":"ol3gXuGbUnc_eW4********","language":"zh_CN","headimgurl":"http:\/\/wx.qlogo.cn\/mmopen\/fnXWjj3SlVWjPuSnnYYZWYmZWpuficJIPmd7ib4cyG5X61ytN3nw7ngDp03exyX*******qH\/0","country":"CN","city":"****"}/** * 授权。如果授权成功,则获取用户信息 * * @param platform */ private void login(SHARE_MEDIA platform) { mController.doOauthVerify(NewLoginMainActivity.this, platform, new SocializeListeners.UMAuthListener() { @Override public void onStart(SHARE_MEDIA platform) { Toast.makeText(NewLoginMainActivity.this, "授权开始", Toast.LENGTH_SHORT).show(); } @Override public void onError(SocializeException e, SHARE_MEDIA platform) { Toast.makeText(NewLoginMainActivity.this, "授权失败", Toast.LENGTH_SHORT).show(); } @Override public void onComplete(Bundle value, SHARE_MEDIA platform) { Log.e(TAG, value.toString()); // 获取uid // String uid = value.getString("uid"); String uid = value.getString("openid"); if (!TextUtils.isEmpty(uid)) { // uid不为空,获取用户信息 getUserInfo(platform); Toast.makeText(NewLoginMainActivity.this, "uid is " + uid, Toast.LENGTH_LONG).show(); } else { Toast.makeText(NewLoginMainActivity.this, "授权失败...", Toast.LENGTH_LONG).show(); } } @Override public void onCancel(SHARE_MEDIA platform) { Toast.makeText(NewLoginMainActivity.this, "授权取消", Toast.LENGTH_SHORT).show(); } }); } /** * 获取用户信息 * * @param platform */ private void getUserInfo(SHARE_MEDIA platform) { mController.getPlatformInfo(NewLoginMainActivity.this, platform, new SocializeListeners.UMDataListener() { @Override public void onStart() { } @Override public void onComplete(int status, Map<String, Object> info) { if (info != null) { Toast.makeText(NewLoginMainActivity.this, info.toString(), Toast.LENGTH_SHORT).show(); String infoStr = info.toString(); JSONObject object = new JSONObject(info); Gson gson = new Gson(); wxUserId = gson.fromJson(object.toString(), WXUserId.class); WXLoginBody loginBody = new WXLoginBody(wxUserId.getOpenid()); BjDataBody body = BJServerBodyUtils.getBjDataBodyForWX(loginBody, true, "", ""); wxInfoPresenter.wxLogin(HttpConstant.BEIJING_URL_NEW_LOGIN_TEST, body); // CommonUtils.LogWuwei(tag,"info is "+infoStr); Log.e(TAG, "info is " + infoStr); } } }); }