关于使用微信登录第三方APP的实现(Android版)
2015-10-23 12:32
801 查看
使用微信登录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文件夹中,就一个文件:
调用微信,申请用户授权:
将APP_ID替换成你在微信开放平台申请到的,上面的代码就可以调起微信了。
授权成功后,微信会返回一个code,下面介绍如何接收微信回传的信息。
在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity.java文件,输入类似下面的代码:
在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
得到下面的数据:
openid可以作为用户的唯一标识,将openid保存下来,就可以实现登录状态的检查了。
如果需要获取用户的信息,例如昵称,头像,可以使用下面的接口:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
得到的数据为:
更多的接口使用,请参考:
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中。
开始之前,需要做下面的准备工作。
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中。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories