无障碍集成微信第三方登录,解决WXEntryActivity不回调onResp
来源:互联网 发布:tao bao淘宝网 编辑:程序博客网 时间:2024/06/06 17:41
导语:
现如今每个社交app都会有第三方登录的功能,今天主要简单阐述一下第三方登录微信的步骤。
步骤:
1.前往微信开放平台注册微信第三方登录app(https://open.weixin.qq.com/),获取所需要的APPID,需要准备相关app应用信息。
2.下载相关第三方登录Jar包,libammsdk.jar
3.审核通过后,会给你一个APPID,在你需要第三方登录的界面进行初始化设置:
private IWXAPI api; //初始化微信登录程序 private void initWXLogin(){ //api注册 api = WXAPIFactory.createWXAPI(this,AppUtils.WXAPPID, true); api.registerApp(AppUtils.WXAPPID); SendAuth.Req req = new SendAuth.Req(); //授权读取用户信息 req.scope = "snsapi_userinfo"; //自定义信息 req.state = "wechat_sdk_demo_test"; //向微信发送请求 api.sendReq(req);// startActivity(new Intent(this, WXEntryActivity.class)); }
4.重点来了,就是新建一个类WXEntryActivity,不可改名,包名也有如下规则。
首先配置manifests文件:
<activity android:exported="true" android:launchMode="singleTop" android:name="包名.wxapi.WXEntryActivity" android:theme="@android:style/Theme.NoDisplay" />
WXEntryActivity包名规则:
很多文档上人云亦云,说manifests中的package就是本app包名,其实是不正确的,app的包名不一定是package中的包名,我们根据最保险的方法,用代码把包名跑出来。
代码如下:
private String getAppInfo() { try { String pkName = this.getPackageName(); String versionName = this.getPackageManager().getPackageInfo( pkName, 0).versionName; int versionCode = this.getPackageManager() .getPackageInfo(pkName, 0).versionCode; return pkName ; } catch (Exception e) { } return null; }
我们用此方法拿到包名后,根据拿到的包名后,在manfests中注册WXEntryActivity,创建一个 wxapi的文件夹 在文件夹下创建WXEntryActivity类,将如下代码全部复制。
WXEntryActivity代码:
import android.app.Activity;import android.os.Bundle;import android.util.Log;import com.google.android.gms.common.api.Api;import com.samples.utils.AppUtils;import com.tencent.mm.sdk.modelbase.BaseReq;import com.tencent.mm.sdk.modelbase.BaseResp;import com.tencent.mm.sdk.modelmsg.SendAuth;import com.tencent.mm.sdk.openapi.IWXAPI;import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;import com.tencent.mm.sdk.openapi.WXAPIFactory;/** * Created by Administrator on 2016/8/16. */public class WXEntryActivity extends Activity implements IWXAPIEventHandler { private IWXAPI api; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //注册API api = WXAPIFactory.createWXAPI(this, AppUtils.WXAPPID); api.handleIntent(getIntent(), this); Log.i("savedInstanceState"," sacvsa"+api.handleIntent(getIntent(), this)); } @Override public void onReq(BaseReq baseReq) { } // 发送到微信请求的响应结果 @Override public void onResp(BaseResp resp) { if(resp instanceof SendAuth.Resp){ SendAuth.Resp newResp = (SendAuth.Resp) resp; //获取微信传回的code String code = newResp.code; Log.i("newRespnewResp"," code :"+code); } switch (resp.errCode) { case BaseResp.ErrCode.ERR_OK: Log.i("savedInstanceState","发送成功ERR_OKERR_OK"); //发送成功 break; case BaseResp.ErrCode.ERR_USER_CANCEL: Log.i("savedInstanceState","发送取消ERR_USER_CANCEL"); //发送取消 break; case BaseResp.ErrCode.ERR_AUTH_DENIED: Log.i("savedInstanceState","发送取消ERR_AUTH_DENIEDERR_AUTH_DENIEDERR_AUTH_DENIED"); //发送被拒绝 break; default: Log.i("savedInstanceState","发送返回breakbreakbreak"); //发送返回 break; } finish(); }}
5.如何拿到OPENID:
用get方法访问https://api.weixin.qq.com/sns/oauth2/access_token?appid= APPID&secret=SECRET&code=CODE&grant_type=authorization_code appid(你的APPID) code(WXEntryActivity 中onResp方法回调得到的code) SECRET(你的secret) grant_type (这个字符串authorization_code) 需要按自己注册的数据用get方法访问这个接口。
得到的数据结构为
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN","openid":"OPENID", "scope":"SCOPE","unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"}
6.如何拿到用户信息:
访问如下接口拿到用户资料,其中access_token便是上个获得OPENID的接口得到的access_token:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
总结:
不要人云亦云,自己实践才能掌握真理。。
0 0
- 无障碍集成微信第三方登录,解决WXEntryActivity不回调onResp
- Android中进行微信第三方登录或分享如何将WXEntryActivity隐藏掉.
- 微信第三方登录无法回调到onResp方法中
- 微信第三方登录集成
- 微信第三方登录集成
- 解决集成微信第三方登录和分享回调的冲突
- 友盟集成第三方登录--微信、QQ实现
- 踩坑!android端集成微信第三方登录
- 关于集成微信SDK不回调/执行onResp解决方法
- 常用微信集成(第三方sdk集成套路)-- 微信登录
- IOS微信第三方支付onResp方法不被回调的解决办法
- IOS微信第三方支付onResp方法不被回调的解决办法
- IOS微信第三方支付onResp方法不被回调的解决办法
- 微信第三方登录
- 微信第三方登录
- 微信第三方登录
- 微信第三方登录
- 微信第三方登录
- 使用Go语言开发iOS应用(Swift版)
- iOS解决json串中的NSNull类型
- Java中Calendar.DAY_OF_WEEK需要减一的原因 month +1
- iOS解析json中null终极解决方案
- Swift 注释技巧
- 无障碍集成微信第三方登录,解决WXEntryActivity不回调onResp
- Objective-C 注释技巧
- 2017年网易有道校园招聘内推笔试
- ftp上传问题解决过程以及思考-pasv以及port两种模式
- Xcode 定制系统注释模板
- fiddler增加显示host的IP
- iPhone 使用小技巧
- 理解MySQL——索引与优化
- H264 图像、帧、片、NALU