Android之微信第三方登录

Android微信第三方登录


个人在用到微信登陆接口的时候发现官方教程很难一下子看懂,尤其是对一些刚刚接触第三方登录的开发者来说。
官方教程: 点击打开链接


1.第一步:申请你的AppID

到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将该应用提交审核,只有审核通过的应用才能进行开发
微信 开发者应用网页 地址: 点击打开链接

1.管理中心——>创建新应用。


Android之微信第三方登录_第1张图片


2.填写应用基本信息,一个月可以改一次,填写不规范会导致审核不通过


Android之微信第三方登录_第2张图片

3.填写你的应用的相关信息,很重要,也比较繁琐


获取签名的方式:在微信开发平台下载签名工具app,在手机上安装后,运行app,输入你自己开发的app的包名(在AndroidManifest.xml文件里面直接复制),签名工具会自动在你的手机上查找到你开发的app,并获取签名,你把得到的签名复制到这里。
签名工具下载地址: 点击打开链接
Android之微信第三方登录_第3张图片

审核通过后就会得到:
AppID:XXXXXXXXXXXXXXXXX
AppSecret:XXXXXXXXXXXXX
这两个参数在后面会用到



2.第二步:搭建环境

在微信开发平台下载资源包:

- libammsdk.jar  。 地址:点击打开链接

然后设置你的项目工程的 AndroidManifest.xml

添加必要的权限支持:

 

  

 

 


简单的三步实现。

1.注册应用到微信

要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的id。(如下图所示,可以在程序入口Activity的onCreate回调函数处,或其他合适的地方将你的应用id注册到微信。

private IWXAPI api;
……

在用到api前先registerApp。

api = WXAPIFactory.createWXAPI(this, APP_ID);
api.registerApp(APP_ID);


2.拉取微信到授权登陆界面

public void sendRequest() {
   // send oauth request
   final SendAuth.Req req = new SendAuth.Req();
   req.scope = "post_timeline";
   req.state = "none";
   api.sendReq(req);
}
 
   

3.在WXEntryActivity中的onResp(BaseResp resp)方法中获取code:

String code = ((SendAuth.Resp) resp).code;//需要转换一下才可以
 
   
 
   

WXEntryActivity何来?WXEntryActivity是自己写的:

 
   

在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity,

当微信发送请求到你的应用,将通过IWXAPIEventHandler接口的onReq方法进行回调,类似的,应用请求微信的响应结果将通过onResp回调

用户点击授权后,微信客户端会被拉起,跳转至授权界面,用户在该界面点击允许或取消,SDK通过SendAuth的Resp返回数据给调用方。
如下:获取微信授权后的返回数据

public class WXEntryActivity extends Activity {
    private IWXAPI iwxapi;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        iwxapi.handleIntent(getIntent(), new IWXAPIEventHandler() {
            @Override
            public void onReq(BaseReq baseReq) {}
            @Override
            public void onResp(BaseResp baseResp) {
		//((SendAuth.Resp) baseResp).code 获取微信返回的“code”码
                String code = getOpenIdByNetWork(((SendAuth.Resp) baseResp).code);
            }
        });
    }
}
并在manifest文件里面加上exported属性,设置为true。
 
   
    android:name="com.dream.wxapi.WXEntryActivity"
    android:exported="true" />

还可以获取其他三个参数:

SendAuth.Resp resp = (SendAuth.Resp) baseResp
code = resp.code;
country = resp.country;
lang = resp.lang;
state = resp.state;
返回值 说明
ErrCode ERR_OK = 0(用户同意)
ERR_AUTH_DENIED = -4(用户拒绝授权)
ERR_USER_CANCEL = -2(用户取消)
code 用户换取access_token的code,仅在ErrCode为0时有效
state 第三方程序发送时用来标识其请求的唯一性的标志,由第三方程序调用sendReq时传入,由微信终端回传,state字符串长度不能超过1K
lang 微信客户端当前语言
country 微信用户当前国家信息


注意

如果需要混淆代码,为了保证sdk的正常使用,需要在proguard.cfg加上下面两行配置:

-keep class com.tencent.mm.sdk.** {

   *;

}


 
   
 
   

3.第三步:访问微信服务器获取Code,再用code获取openId

 
   
 
   
微信客户端授权返回参数说明

用户点击授权后,微信客户端会被拉起,跳转至授权界面,用户在该界面点击允许或取消,SDK通过SendAuth的Resp返回数据给调用方。

返回值 说明
ErrCode ERR_OK = 0(用户同意) ERR_AUTH_DENIED = -4(用户拒绝授权) ERR_USER_CANCEL = -2(用户取消)
code 用户换取access_token的code,仅在ErrCode为0时有效
state 第三方程序发送时用来标识其请求的唯一性的标志,由第三方程序调用sendReq时传入,由微信终端回传,state字符串长度不能超过1K
lang 微信客户端当前语言
country 微信用户当前国家信息
 
   

然后获取第一步的code后,请求以下链接获取access_token:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

请求参数说明
参数 是否必须 说明
appid 应用唯一标识,在微信开放平台提交应用审核通过后获得
secret 应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
code 填写第一步获取的code参数
grant_type 填authorization_code
获取access_token返回参数说明

正确的返回:

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

"unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"

}

参数 说明
access_token 接口调用凭证
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 授权用户唯一标识
scope 用户授权的作用域,使用逗号(,)分隔
unionid  当且仅当该移动应用已获得该用户的userinfo授权时,才会出现该字段

错误返回样例:

{"errcode":40029,"errmsg":"invalid code"}

 
   
 
   

4.第四步:带上openId访问自己的服务器

返回参数的openid是你最关注的字段。拿到它就拿到了微信登陆凭证。
SendAuth.Resp resp = (SendAuth.Resp) baseResp
code = resp.code;
country = resp.country;
lang = resp.lang;
state = resp.state;
返回值 说明
ErrCode ERR_OK = 0(用户同意)
ERR_AUTH_DENIED = -4(用户拒绝授权)
ERR_USER_CANCEL = -2(用户取消)
code 用户换取access_token的code,仅在ErrCode为0时有效
state 第三方程序发送时用来标识其请求的唯一性的标志,由第三方程序调用sendReq时传入,由微信终端回传,state字符串长度不能超过1K
lang 微信客户端当前语言
country 微信用户当前国家信息


链接:Android之QQ登录

你可能感兴趣的:(Android)