Android之微信第三方登录
Android微信第三方登录
个人在用到微信登陆接口的时候发现官方教程很难一下子看懂,尤其是对一些刚刚接触第三方登录的开发者来说。 官方教程: 点击打开链接
1.第一步:申请你的AppID
到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将该应用提交审核,只有审核通过的应用才能进行开发微信 开发者应用网页 地址: 点击打开链接
1.管理中心——>创建新应用。
2.填写应用基本信息,一个月可以改一次,填写不规范会导致审核不通过
3.填写你的应用的相关信息,很重要,也比较繁琐
获取签名的方式:在微信开发平台下载签名工具app,在手机上安装后,运行app,输入你自己开发的app的包名(在AndroidManifest.xml文件里面直接复制),签名工具会自动在你的手机上查找到你开发的app,并获取签名,你把得到的签名复制到这里。 签名工具下载地址: 点击打开链接
审核通过后就会得到: 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) baseRespcode = 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) baseRespcode = 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难用:用户须是计算机专家
- Activity Task 栈及亲缘关系
- Android(安卓)SDK上手指南 3:用户交互
- 【Cocos2d-x】Mac 上 Cocos2d-x 3.X 打包Android
- 深入四大组件之Activity
- Android系统的Root权限获取与检测
- Android(安卓)自定义View 绘制正N边形
- 警惕针对中国移动手机用户的Android恶意软件
- 【Android(安卓)API指南】App组件(5) - Activities(3) - 任务和