无障碍集成微信第三方登录,解决WXEntryActivity不回调onResp

来源:互联网 发布:tao bao淘宝网 编辑:程序博客网 时间:2024/06/06 17:41

导语:
现如今每个社交app都会有第三方登录的功能,今天主要简单阐述一下第三方登录微信的步骤。
步骤:
1.前往微信开放平台注册微信第三方登录app(https://open.weixin.qq.com/),获取所需要的APPID,需要准备相关app应用信息。
2.下载相关第三方登录Jar包,libammsdk.jar
3.审核通过后,会给你一个APPID,在你需要第三方登录的界面进行初始化设置:

    private IWXAPI api;     //初始化微信登录程序    private void initWXLogin(){        //api注册        api = WXAPIFactory.createWXAPI(this,AppUtils.WXAPPID, true);        api.registerApp(AppUtils.WXAPPID);        SendAuth.Req req = new SendAuth.Req();        //授权读取用户信息        req.scope = "snsapi_userinfo";        //自定义信息        req.state = "wechat_sdk_demo_test";        //向微信发送请求        api.sendReq(req);//        startActivity(new Intent(this, WXEntryActivity.class));    }

4.重点来了,就是新建一个类WXEntryActivity,不可改名,包名也有如下规则。
首先配置manifests文件:

        <activity            android:exported="true"            android:launchMode="singleTop"            android:name="包名.wxapi.WXEntryActivity"            android:theme="@android:style/Theme.NoDisplay" />

WXEntryActivity包名规则:
很多文档上人云亦云,说manifests中的package就是本app包名,其实是不正确的,app的包名不一定是package中的包名,我们根据最保险的方法,用代码把包名跑出来。
代码如下:

    private String getAppInfo() {        try {            String pkName = this.getPackageName();            String versionName = this.getPackageManager().getPackageInfo(                    pkName, 0).versionName;            int versionCode = this.getPackageManager()                    .getPackageInfo(pkName, 0).versionCode;            return pkName ;        } catch (Exception e) {        }        return null;    }

我们用此方法拿到包名后,根据拿到的包名后,在manfests中注册WXEntryActivity,创建一个 wxapi的文件夹 在文件夹下创建WXEntryActivity类,将如下代码全部复制。
WXEntryActivity代码:

import android.app.Activity;import android.os.Bundle;import android.util.Log;import com.google.android.gms.common.api.Api;import com.samples.utils.AppUtils;import com.tencent.mm.sdk.modelbase.BaseReq;import com.tencent.mm.sdk.modelbase.BaseResp;import com.tencent.mm.sdk.modelmsg.SendAuth;import com.tencent.mm.sdk.openapi.IWXAPI;import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;import com.tencent.mm.sdk.openapi.WXAPIFactory;/** * Created by Administrator on 2016/8/16. */public class WXEntryActivity extends Activity implements IWXAPIEventHandler {    private IWXAPI api;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //注册API        api = WXAPIFactory.createWXAPI(this, AppUtils.WXAPPID);        api.handleIntent(getIntent(), this);        Log.i("savedInstanceState"," sacvsa"+api.handleIntent(getIntent(), this));    }    @Override    public void onReq(BaseReq baseReq) {    }    //  发送到微信请求的响应结果    @Override    public void onResp(BaseResp resp) {        if(resp instanceof SendAuth.Resp){            SendAuth.Resp newResp = (SendAuth.Resp) resp;            //获取微信传回的code            String code = newResp.code;            Log.i("newRespnewResp","   code    :"+code);        }        switch (resp.errCode) {            case BaseResp.ErrCode.ERR_OK:                Log.i("savedInstanceState","发送成功ERR_OKERR_OK");                //发送成功                break;            case BaseResp.ErrCode.ERR_USER_CANCEL:                Log.i("savedInstanceState","发送取消ERR_USER_CANCEL");                //发送取消                break;            case BaseResp.ErrCode.ERR_AUTH_DENIED:                Log.i("savedInstanceState","发送取消ERR_AUTH_DENIEDERR_AUTH_DENIEDERR_AUTH_DENIED");                //发送被拒绝                break;            default:                Log.i("savedInstanceState","发送返回breakbreakbreak");                //发送返回                break;        }        finish();    }}

5.如何拿到OPENID:

用get方法访问https://api.weixin.qq.com/sns/oauth2/access_token?appid= APPID&secret=SECRET&code=CODE&grant_type=authorization_code appid(你的APPID) code(WXEntryActivity 中onResp方法回调得到的code) SECRET(你的secret) grant_type (这个字符串authorization_code) 需要按自己注册的数据用get方法访问这个接口。 

得到的数据结构为

{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN","openid":"OPENID", "scope":"SCOPE","unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"}

6.如何拿到用户信息:
访问如下接口拿到用户资料,其中access_token便是上个获得OPENID的接口得到的access_token:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
总结:
不要人云亦云,自己实践才能掌握真理。。

0 0
原创粉丝点击