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登录

更多相关文章

  1. 鲍尔默炮轰Android难用:用户须是计算机专家
  2. Activity Task 栈及亲缘关系
  3. Android(安卓)SDK上手指南 3:用户交互
  4. 【Cocos2d-x】Mac 上 Cocos2d-x 3.X 打包Android
  5. 深入四大组件之Activity
  6. Android系统的Root权限获取与检测
  7. Android(安卓)自定义View 绘制正N边形
  8. 警惕针对中国移动手机用户的Android恶意软件
  9. 【Android(安卓)API指南】App组件(5) - Activities(3) - 任务和

随机推荐

  1. 苹果Mac好用的录屏软件:Filmage Screen
  2. Java企业级电商项目架构演进之路 Tomcat
  3. linux系统执行读取jar包同级目录的外部配
  4. Linux常用文件类型有哪些?六大类!
  5. 永久免费!国产操作系统 Deepin V20 Beta版
  6. 为什么写爬虫用Python语言?原因很简单!
  7. 自动补全、回滚!介绍一款可视化 sql 诊断
  8. 数据管理服务的本质是什么?
  9. 开源、强大的Linux服务器集群管理工具,比
  10. ASM磁盘组配置