使用微信登录APP,免去注册过程,现在已经有很多的类似应用了。集成该功能过程不复杂,但还是有一些地方需要注意的。

开始之前,需要做下面的准备工作。

1、到微信开放平台注册你的APP,并申请开通微信登录的权限。参考这里:

https://open.weixin.qq.com//

2、下载Android SDK和签名查看工具,请参考:

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=&lang=zh_CN/

3、获取到APP的签名,并填写到微信开放平台。

下面开始进入主题:

引入微信登录相关SDK到项目的lib文件夹中,就一个文件:

libammsdk.jar

调用微信,申请用户授权:

//api注册
api = WXAPIFactory.createWXAPI(this, "APP_ID", true);
api.registerApp("APP_ID"); SendAuth.Req req = new SendAuth.Req(); //授权读取用户信息
req.scope = "snsapi_userinfo"; //自定义信息
req.state = "wechat_sdk_demo_test"; //向微信发送请求
api.sendReq(req);

将APP_ID替换成你在微信开放平台申请到的,上面的代码就可以调起微信了。

授权成功后,微信会返回一个code,下面介绍如何接收微信回传的信息。

在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity.java文件,输入类似下面的代码:

package 你的包名.wxapi;

public class WXEntryActivity extends Activity implements IWXAPIEventHandler{

    @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); //注册API
api = WXAPIFactory.createWXAPI(this, "APP_ID");
api.handleIntent(getIntent(), this);
} @Override
public void onResp(BaseResp resp) { if(resp instanceof SendAuth.Resp){
SendAuth.Resp newResp = (SendAuth.Resp) resp; //获取微信传回的code
String code = newResp.code;
} } }

在AndroidManifest.xml中加入下面的代码:

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

修复WXEntryActivity中的错误,在onResp方法中获取到code,然后通过下面的接口获取到token和openid:

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

得到下面的数据:

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

openid可以作为用户的唯一标识,将openid保存下来,就可以实现登录状态的检查了。

如果需要获取用户的信息,例如昵称,头像,可以使用下面的接口:

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

得到的数据为:

{
"openid":"OPENID",
"nickname":"NICKNAME",
"sex":1,
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"privilege":[
"PRIVILEGE1",
"PRIVILEGE2"
],
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL" }

更多的接口使用,请参考:

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317853&lang=zh_CN

可能的问题

1、无法调起微信。

可能的原因是签名错误,请检查签名。

2、无法接受到微信回传的信息

可能的原因是没有把WXEntryActivity加入到AndroidManifest.xml中。

关于使用微信登录第三方APP的实现(Android版)的更多相关文章

  1. APP微信登录---第三方登录

    (一)引入maven配置 <dependency> <groupId>com.github.liyiorg</groupId> <artifactId> ...

  2. iOS微信实现第三方登录的方法

    这篇文章主要介绍了iOS微信第三方登录实现的全过程,一步一步告诉大家iOS微信实现第三方登录的方法,感兴趣的小伙伴们可以参考一下   一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2 ...

  3. 详解如何进行第三方App接入微信登录

    微信登录接入 微信登录遵循协议Aouth2.0中的授权码模式 我们来看一下Aouth2.0中的授权码模式是怎么定义的: 授权码模式(authorization code)是功能最完整.流程最严密的授权 ...

  4. 微信授权登陆接入第三方App(步骤总结)Android

    微信授权登陆接入第三方App(步骤总结)Android Android App实现第三方微信登录

  5. Android通过微信实现第三方登录并使用OKHttp获得Token及源码下载

    这里对于App在微信开放平台上申请AppID和secret在这里就略过了,我们微信的授权登录流程,腾讯官网给的流程如下: 1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用 ...

  6. Laravel6实现第三方 微信登录

    目前很多的网站中都会存在很多的交互功能,从而降低用户的操作难度,特此带来微信的第三方登录的项目实战功能开发.对于本实例中的开发内容,就不在使用原生的内容,而是直接使用别人写好的封装的类库. 1. 安装 ...

  7. dedecms织梦第三方登录插件-QQ登录、微博登录、微信登录

    织梦程序集成第三方QQ登录.微博登录.微信登录,获取QQ.微博.微信,并存储至数据库,一键注册为网站会员,不用再次填写绑定信息,方便粘贴用户更强. 织梦第三方登录效果 第三方登录插件特点 1.所有文件 ...

  8. 微信授权登陆接入第三方App(步骤总结)Android。

    这几天开发要用到微信授权的功能,所以就研究了一下.可是微信开放平台接入指南里有几个地方写的不清不楚.在此总结一下,以便需要的人. 很多微信公众平台的应用如果移植到app上的话就需要微信授权登陆了. 目 ...

  9. Asp.Net微信登录-手机网站APP应用

    要求:公众号必须先认证,认证费用¥300/年,比较黑 一.微信登录核心代码 //核心代码,没判断异常 1.登录页面 protected void Page_Load(object sender, Ev ...

随机推荐

  1. Log4j快速使用精简版

    Log4j快速使用精简版 1.导入log4j-1.2.17.jar包 2.在src根目录下创建log4j.properties文件 log4j.rootLogger=INFO, CONSOLE, FI ...

  2. Lucky 2048 - The secret of being lucky

    Lucky 2048 uses a normal distribution to create "lucky" start. Generally speaking, it prov ...

  3. Erlang环境用eclipse搭建

    erlide插件eclipse开发erlang   一.相关资料 Erlang 的官方网站是http://www.erlang.org.其左侧的连接指出了我们可以从这里获取的资源. 其中, Downl ...

  4. 使用spring @Scheduled注解执行定时任务、

    http://blog.csdn.net/sd4000784/article/details/7745947,留下来备用.

  5. PHP时区配置

    在PHP安装目录中找到 php.ini-development 复制创建新的副本 找到 :date.timezone = 修改为 date.timezone = PRC 并保存为php.ini PRC ...

  6. BZOJ 2898 模拟

    普及组水题. 按位模拟第一个序列和第二个序列,细节比较多.. 仅为部分看后面两位的和,如果大于10就近位小于8就不进位等于9就看下一位. #include <cstdio> #define ...

  7. nfs文件系统挂载错误及解决方法

    挂载nfs时出现如下错误: 原因: 没有安装nfs客户端相关 解决方法: apt-get install nfs-common 参考资料: http://askubuntu.com/questions ...

  8. 整数中1出现的次数(从1到n整数中1出现的次数)

    题目:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.AC ...

  9. Exchange 基本命令累计

    Get-ExchangeServer | fl name,edition,admindisplayversion  //查看exchange服务器版本

  10. hash连接

    简单回顾嵌套循环: 两个表关联,较小的表(指使用了过滤条件后结果集较小的表)称为驱动表或者外表(,另一个称为内表.在嵌套连接过程中,oracle首先读取驱动表的第一条数据,然后和内表进行比对,所以匹配 ...