本文实例讲述了Android实现使用微信登录第三方APP的方法。分享给大家供大家参考,具体如下:

使用微信登录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

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

?
1 2 3 4 5 6 7 8 9 10 //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;

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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中加入下面的代码:

复制代码代码如下:

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

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

得到下面的数据:

?
1 2 3 4 5 6 7 8 { "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

得到的数据为:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 { "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中。

PS:关于AndroidManifest.xml文件相关属性功能可参考本站在线工具:

Android Manifest功能与权限描述大全:
http://tools.jb51.net/table/AndroidManifest

更多相关文章

  1. 为什么我们可以在非UI线程中更新UI
  2. Android如何获取系统联系人数据?
  3. Android(安卓)Studio 单元测试入门
  4. 如何编写高效的Android代码
  5. Android(安卓)Async HTTP Clients: Volley vs Retrofit
  6. android application类和全局数据使用
  7. 利用旧版Android漏洞的E-Z-2-Use攻击代码已在Metasploit发布
  8. 「Android(安卓)进阶」Android(安卓)项目代码混淆,防反编译
  9. Android(安卓)禁止系统休眠,使屏幕不变暗

随机推荐

  1. 用git下载Android自带app的源代码
  2. Android之蓝牙startDiscovery()搜索不到
  3. Android开发者指南(4) —— Application
  4. Android(安卓)Studio 视图解析
  5. Android(安卓)整理常用的第三方库
  6. Android在代码中查看系统版本
  7. 关于android监听H5发送的事件实现方法。
  8. 【Android】如何方便地将代码抛到主线程
  9. Android(安卓)点击EditText外部区域失去
  10. Android-解决AutoCompleteText下拉提示的