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

导语:
现如今每个社交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
总结:
不要人云亦云,自己实践才能掌握真理。。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页