1.在微信开放平台生成的 wx appid参数 与 apk打包时的签名文件要对应。
2.微信回调activity文件所在路径要与应用包名一致。
如:应用包名为:com.xxx.demo ,则回调文件路径固定为 com.xxx.demo.wxapi.WXEntryActicity
回调文件内容:
package com.xxx.demo.wxapi;
...
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI api;
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// Log.e("WXEntryActivity","----------------------------------------进入onNewIntent回调----------------------------------------");
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Log.e("WXEntryActivity","----------------------------------------进入onCreate回调----------------------------------------");
api = WXAPIFactory.createWXAPI(this, "wx_appid");
api.handleIntent(getIntent(), this);
}
/**
* 微信发送请求到第三方应用时,会回调到该方法
*
* @param req 回调
*/
@Override
public void onReq(BaseReq req) {
Log.e("WXEntryActivity","----------------------------------------进入Req回调----------------------------------------");
finish();
}
/**
* 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
*
* @param resp 回调
*/
@Override
public void onResp(BaseResp resp) {
Log.e("WXEntryActivity","----------------------------------------进入Resp回调----------------------------------------");
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
// Log.e("WXEntryActivity","----------------------success");
SendAuth.Resp resp1 = (SendAuth.Resp) resp;
// Log.e("WXEntryActivity","code = "+resp1.code);
// getAccessToken(resp1.code);
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
// Log.e("WXEntryActivity","----------------------cancel");
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
// Log.e("WXEntryActivity","----------------------refuse");
break;
default:
// Log.e("WXEntryActivity","----------------------back");
break;
}
finish();
}
private void getAccessToken(String code) {
//获取授权
StringBuffer loginUrl = new StringBuffer();
loginUrl.append("https://api.weixin.qq.com/sns/oauth2/access_token")
.append("?appid=")
// .append(Constants.WX_ID)
.append("&secret=")
.append(Constants.APP_SECRET)
.append("&code=")
.append(code)
.append("&grant_type=authorization_code");
HttpUtil.url(loginUrl.toString()).get(new HttpUtil.HttpCallBack() {
@Override
public void onSuc(String result) {
// Log.e("WXEntryActivity","----------------------result = "+result);
// WxCallBack callBack = new Gson().fromJson(result, WxCallBack.class);
// getUserInfo(callBack.access_token,callBack.openid);
}
@Override
public void onFail(String err) {
Log.e("WXEntryActivity","----------------------err = "+err);
finish();
}
});
}
private void getUserInfo(String access, String openId) {
//获取用户信息
String getUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="
+ access + "&openid=" + openId;
HttpUtil.url(getUserInfoUrl).get(new HttpUtil.HttpCallBack() {
@Override
public void onSuc(String result) {
// Log.e("WXEntryActivity","----------------------result = "+result);
SmallGameSdk.instance().getCallBack().onSuc(result);
finish();
}
@Override
public void onFail(String err) {
Log.e("WXEntryActivity","----------------------err = "+err);
SmallGameSdk.instance().getCallBack().onFail(err);
finish();
}
});
}
在manifest中的配置:
<activity android:name="com.xxx.demo.wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"/>
调起微信登录代码:
IWXAPI api = WXAPIFactory.createWXAPI(activity, "wx_appid", false);
api.registerApp("wx_appid");
if (api.isWXAppInstalled()) {
final SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_demo_test";
api.sendReq(req);
}else {
Toast.makeText(activity, "您的设备未安装微信客户端", Toast.LENGTH_SHORT).show();
}