Android 微信授权登录、获取Wx用户信息,解决无法回调问题

来源:互联网 发布:mac隐藏windows分区 编辑:程序博客网 时间:2024/06/06 02:24

微信授权登录,官方说的不是很清楚、所以导致有一部分的坑。

据此记载..(坑)

1.微信注册应用平台的应用签名为 打包keystore的MD5 小写并且去掉 ":" 号组成、或者去下载 微信签名生成工具 输入项目的packageName也可以查看到。

2.授权没反应,监测微信App_Id是否正确、是否按照上1.生成。 当前的App是否正式签名?也就是正式App.. DeBug签名环境的App貌似无法调动微信。 

3.关于回调:是否按照官方要求注册WXEntryActivity并且继承Acticiy、 此Activity不能改名,并且在你的 package(项目报名).wxapi.WXEntryActivity.java 下面。 注册* 每段代码都别少...

<!--注册微信回调 WXEntryActivity --><activity    android:name=".wxapi.WXEntryActivity"    android:exported="true"    android:label="@string/app_name"    android:launchMode="singleTop"    android:theme="@android:style/Theme.Translucent" />

4.回调方法onResp() 方法没有触发回调、请监测WXEntryActivity onCreate中是否调用此方法  mApi.handleIntent(this.getIntent(), this);

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {    private final String TAG = this.getClass().getSimpleName();    public static final String APP_ID = "请自己填写";    public static final String APP_SECRET = "请自己填写";    private IWXAPI mApi;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mApi = WXAPIFactory.createWXAPI(this, APP_ID, true);        mApi.handleIntent(this.getIntent(), this);    }    //微信发送的请求将回调到onReq方法    @Override    public void onReq(BaseReq baseReq) {    }    //发送到微信请求的响应结果    @Override    public void onResp(BaseResp resp) {        switch (resp.errCode) {            case BaseResp.ErrCode.ERR_OK:                //发送成功                break;            case BaseResp.ErrCode.ERR_USER_CANCEL:                //发送取消                break;            case BaseResp.ErrCode.ERR_AUTH_DENIED:                //发送被拒绝                break;            default:                //发送返回                break;        }        finish();    }}
5.当授权时候进入WXEntryActivity、当前背景可能是黒或白,为了不影响用户体验,可以把当前Activity设置为透明。android:theme="@android:style/Theme.Translucent" ,可以参照上3. WXEntryActivity注册格式。


以上便是授权登录遇到的坑、只怪Wx要求格式的有个性、多多少少会遇到这样的坑。委屈


授权登录并且拿取Wx用户信息,简单三部曲:

* * 1.sendReq(req). 用户授权可以拿到 code* * 2.用code.调用Wx接口拿到 openid & accessToken* * 3.通过openid & accessToken 俩参数可以拿到最终用户信息** 

具体可参考:微信授权登录取用户信息步骤


部分代码:

/** * 获取openid accessToken值用于后期操作 * * @param code 请求码 */private void getAccess_token(final String code) {    new Thread(new Runnable() {        @Override        public void run() {            String path = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="                    + APP_ID                    + "&secret="                    + APP_SECRET                    + "&code="                    + code                    + "&grant_type=authorization_code";            try {                JSONObject jsonObject = JsonUtils.initSSLWithHttpClinet(path);// 请求https连接并得到json结果                if (null != jsonObject) {                    String openid = jsonObject.getString("openid").toString().trim();                    String access_token = jsonObject.getString("access_token").toString().trim();                    getUserMesg(access_token, openid);                }            } catch (Exception e) {                e.printStackTrace();            }        }    }).start();}/** * 获取微信的个人信息 * * @param access_token * @param openid */private void getUserMesg(final String access_token, final String openid) {    String path = "https://api.weixin.qq.com/sns/userinfo?access_token="            + access_token            + "&openid="            + openid;    try {        JSONObject jsonObject = JsonUtils.initSSLWithHttpClinet(path);// 请求https连接并得到json结果        if (null != jsonObject) {            String nickname = jsonObject.getString("nickname");            int sex = Integer.parseInt(jsonObject.get("sex").toString());            String headimgurl = jsonObject.getString("headimgurl");            Log.e(TAG, "getUserMesg 拿到了用户Wx基本信息.. nickname:" + nickname);        }    } catch (Exception e) {        e.printStackTrace();    }    return;}

具体代码:微信授权登录 - 案例 Dome。


参考、感谢:

1.http://blog.csdn.net/xiong_it/article/details/48317527   

2.https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN


3 0