安卓第三方微信登陆及其中的坑
来源:互联网 发布:过程控制软件 编辑:程序博客网 时间:2024/05/21 22:42
做一个项目使用微信登陆。使用过程中只能吐槽BAT三大公司的服务还是阿里做的最好,不管是文档说明还是客服服务。微信登陆中的坑真是太多了。为避免以后再走同样的坑和其他人采坑,分享一下过程。
首先在 https://open.weixin.qq.com 申请 账号,然后在管理中心创建申请应用。打一个签名的申请的app包,
然后下载签名生成工具 :
点击打开链接
通过签名生成工具把读取到的签名 填到应用签名里面以及填写包名。还有一个坑爹的地方 如果申请的应用名称叫Test,而以前别人也申请过的其他应用也叫Test,那么你就不能申请了,为什么不是通过包名去判断是不是以前使用过,应用名称太容易重复了。如果你申请的时候把应用名称改成test1,应用名称依然test,那么微信第三方登录的时候显示的就是 test1了
然后提交审核。
下面操作都是审核通过后才会才能使用登陆,以前好像使用微信登陆免费,现在也开始一年300的收费费用了,更坑爹了,连免费服务都没了。
下载微信登陆分享 Jar 包。
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&lang=zh_CN
导入Jar包。
在启动页进行 微信注册
public static IWXAPI api; private void regToWx() { api = WXAPIFactory.createWXAPI(this, WXAPPID, true); api.registerApp(WXAPPID); }
WXAPPID 为 申请审核通过后的 APPID。
在登陆的时候使用 SendAuth.Req,即点击微信登陆调用下面代码
final SendAuth.Req req = new SendAuth.Req(); //授权读取用户信息 req.scope = "snsapi_userinfo"; req.state = "wechat_sdk_demo_test"; api.sendReq(req);
注意 req.scope = "snsapi_userinfo"; snsapi_userinfo 需要使用这个值,获取微信用户信息范围,不能乱写,不然会出现 scope参数错误或没有scope权限 错误。
这个网络请求回调的结果在 微信规定的 WXEntryActivity 里。
代码如下
public class WXEntryActivity extends Activity implements IWXAPIEventHandler{ @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityLogin.api.handleIntent(getIntent(), this); } @Override public void onReq(BaseReq baseReq) { } @Override public void onResp(BaseResp baseResp) { if(baseResp instanceof SendAuth.Resp){ SendAuth.Resp newResp = (SendAuth.Resp) baseResp; //获取微信传回的code String code = newResp.code; } }}
这个需要注意 WXEntryActivity 的位置。需要在申请的包名的路径下。如包名为com.apptest.wxapi 还得有 wxapi 这个包名路径
而我今天遇到的问题是这样的,申请的微信登陆还没审核通过,于是就使用了以前申请的 微信登陆APPID,APPSECRET的,然后在gradle中把包名改成了以前使用 的包名,同时签名也是用了以前的APP的签名key,微信登陆一切正常,但点击 《确认登陆》之后 在 WXEntryActivity 一直没有回调,以为少什么配置,就一直找官方说明,但是怎么找都没找到原因,最后发现是 gradle 中的包名 和 Manifest 中的包名不一样,然后 那个定义好的 WXEntryActivity 就接收不到 登陆授权之后的回调了,真是坑。 也就是在 Manifest中假如 WXEntryActivity 包名为 com.testapp1.wxapi 而 以前申请通过的 微信登陆的包名 为 com.testapp2, 那么com.testapp1.wxapi下的的包名 WXEntryActivity 是得不到 登陆分享回调的,在Manifest中 WXEntryActivity 的包名路径也得为 com.testapp2.wxapi。
登陆之后通过得到的code 再获取access_token,链接格式如下
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"}
再获取用户基本信息,请求接口格式如下:
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"}
- 安卓第三方微信登陆及其中的坑
- 安卓第三方接入登陆-新浪登陆
- 安卓中的简单操作文件(登陆界面)
- 安卓,登陆加密
- 安卓QQ登陆
- 安卓实现登陆
- 第三方微信登陆Demo
- 安卓高级9 shareSDK 第三方登陆和分享Mob
- 安卓第三记
- 安卓登陆界面设计(LayoutInflater)
- 安卓之登陆页面
- 安卓登陆与注册
- iOS ShareSDK第三方微信登陆
- 第三方微信登陆编译问题
- 安卓drawText中的坑
- 安卓作业--第三篇
- 安卓入门第三篇
- 安卓基础<第三章>
- C++Primer第三章(第五版) 课后习题 程序题 源代码
- HDU 5842 Lweb and String (神坑)
- H5成长之路 随机输出数组中n个字符串
- HDU 2191 - 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
- 极大线性无关组
- 安卓第三方微信登陆及其中的坑
- 【JZOJ4693】疯狂的火神
- FragmentTabHost、Fragment实现底部点击切换Tab页面
- js/jquery 获取本地文件的文件路劲 获取input框中type=‘file’ 中的文件路径
- 《实战Java...》读书笔记
- tomcat7可以运行jdk8的项目吗/jdk8项目在tomcat7上可以使用吗
- HDU 1171(dp46)
- iOS 程序 main 函数之前发生了什么
- 夏令营day11总结