Android微信第三方登录(个人笔记)

今天在写微信登录,花了半天时间搞定、然后写下自己的笔记,希望帮助更多的人。欢迎各位指教。

微信授权登录,官方说的不是很清楚、所以导致有一部分的坑。

微信注册应用平台的应用签名,下载 微信签名生成工具 输入项目的packageName也可以查看到。

(注意:debug、Release 一定要区分,因为2种生成的微信签名不一致,会导致没有跳转、回调。。。。一般在微信开发者上面注册的是正式环境打包好的、)

申请微信开发者账号、应用申请省略。

1. AndroidManifest.xml 权限

<!-- 微信权限--> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

2.在图一按钮上面,加上微信跳转方法、也就是启动微信登录的方法

private void loginToWeiXin(){ IWXAPI mApi = WXAPIFactory.createWXAPI(this, WXEntryActivity.WEIXIN_APP_ID, true); mApi.registerApp(WXEntryActivity.WEIXIN_APP_ID); if (mApi != null && mApi.isWXAppInstalled()) { SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = "wechat_sdk_demo_test_neng"; mApi.sendReq(req); } else Toast.makeText(this, "用户未安装微信", Toast.LENGTH_SHORT).show(); }

3.在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity

package(项目报名).wxapi.WXEntryActivity.Java

回调方法onResp() 方法没有触发回调、请监测WXEntryActivity onCreate中是否调用此方法  mApi.handleIntent(this.getIntent(), this);

package com.xxx.xxxx.android.wxapi; /** * 微信登录页面 * @author kevin_chen 2016-12-10 下午19:03:45 * @version v1.0 */ public class WXEntryActivity extends Activity implements IWXAPIEventHandler { private static final String APP_SECRET = "填写自己的AppSecret"; private IWXAPI mWeixinAPI; public static final String WEIXIN_APP_ID = "填写自己的APP_id"; private static String uuid; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mWeixinAPI = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID, true); mWeixinAPI.handleIntent(this.getIntent(), this); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); mWeixinAPI.handleIntent(intent, this);//必须调用此句话 } //微信发送的请求将回调到onReq方法 @Override public void onReq(BaseReq req) { LogUtils.log("onReq"); } //发送到微信请求的响应结果 @Override public void onResp(BaseResp resp) { LogUtils.log("onResp"); switch (resp.errCode) { case BaseResp.ErrCode.ERR_OK: LogUtils.log("ERR_OK"); //发送成功 SendAuth.Resp sendResp = (SendAuth.Resp) resp; if (sendResp != null) { String code = sendResp.code; getAccess_token(code); } break; case BaseResp.ErrCode.ERR_USER_CANCEL: LogUtils.log("ERR_USER_CANCEL"); //发送取消 break; case BaseResp.ErrCode.ERR_AUTH_DENIED: LogUtils.log("ERR_AUTH_DENIED"); //发送被拒绝 break; default: //发送返回 break; } } /** * 获取openid accessToken值用于后期操作 * @param code 请求码 */ private void getAccess_token(final String code) { String path = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + WEIXIN_APP_ID + "&secret=" + APP_SECRET + "&code=" + code + "&grant_type=authorization_code"; LogUtils.log("getAccess_token:" + path); //网络请求,根据自己的请求方式 VolleyRequest.get(this, path, "getAccess_token", false, null, new VolleyRequest.Callback() { @Override public void onSuccess(String result) { LogUtils.log("getAccess_token_result:" + result); JSONObject jsonObject = null; try { jsonObject = new JSONObject(result); String openid = jsonObject.getString("openid").toString().trim(); String access_token = jsonObject.getString("access_token").toString().trim(); getUserMesg(access_token, openid); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onError(String errorMessage) { } }); } /** * 获取微信的个人信息 * @param access_token * @param openid */ private void getUserMesg(final String access_token, final String openid) { String path = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid; LogUtils.log("getUserMesg:" + path); //网络请求,根据自己的请求方式 VolleyRequest.get(this, path, "getAccess_token", false, null, new VolleyRequest.Callback() { @Override public void onSuccess(String result) { LogUtils.log("getUserMesg_result:" + result); JSONObject jsonObject = null; try { jsonObject = new JSONObject(result); String nickname = jsonObject.getString("nickname"); int sex = Integer.parseInt(jsonObject.get("sex").toString()); String headimgurl = jsonObject.getString("headimgurl"); LogUtils.log("用户基本信息:"); LogUtils.log("nickname:" + nickname); LogUtils.log("sex:" + sex); LogUtils.log("headimgurl:" + headimgurl); } catch (JSONException e) { e.printStackTrace(); } finish(); } @Override public void onError(String errorMessage) { } }); } }

5.在 AndroidManifest.xml 设置注册微信的页面

当授权时候进入WXEntryActivity、当前背景可能是黒或白,为了不影响用户体验,可以把当前Activity设置为透明:

android:theme="@android:style/Theme.Translucent"

<!--注册微信回调 WXEntryActivity --> <activity android:name=".wxapi.WXEntryActivity" android:exported="true" android:label="@string/app_name" android:launchMode="singleTop" android:theme="@android:style/Theme.Translucent" />

具体可参考:微信授权登录取用户信息步骤

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-09-29 09:50:40

Android微信第三方登录(个人笔记)的相关文章

Android微信第三方登录(个人笔记)_Android

今天在写微信登录,花了半天时间搞定.然后写下自己的笔记,希望帮助更多的人.欢迎各位指教. 微信授权登录,官方说的不是很清楚.所以导致有一部分的坑. 微信注册应用平台的应用签名,下载 微信签名生成工具 输入项目的packageName也可以查看到. (注意:debug.Release 一定要区分,因为2种生成的微信签名不一致,会导致没有跳转.回调....一般在微信开发者上面注册的是正式环境打包好的.)     申请微信开发者账号.应用申请省略.   1. AndroidManifest.xml 权

android、第三方登录-Android第三方登录demo(特别是微信)

问题描述 Android第三方登录demo(特别是微信) 目前QQ第三方登录已经实现,但是微信的感觉官方的demo不行,需要一个可以微信登录的demo借我研究一下.感谢! 解决方案 Android第三方登录--微信登录Android微信第三方登录接入android集成第三方微信登录 解决方案二: 你百度一下Mob,以前叫ShareSDK的

微信第三方登录-android摄像头权限提醒问题

问题描述 android摄像头权限提醒问题 有个奇怪的问题,app里面需要摄像头权限,当我首次进入app第一个页面的时候并没有提醒是否允许使用摄像头,当我调用微信第三方登录的时候却出现了,这个页面根本没有涉及到摄像头权限. 想问下各位大神,有没有办法让这个提醒在第一个页面提醒? 解决方案 加张图片....... 解决方案二: 关于android的权限问题Android sdcard读写权限问题之一android2.3权限问题 解决方案三: 这个弹出的提示框的代码挪到你起始页面那里阿

微信第三方登录Android实现代码_Android

记录一下微信第三方实现登录的方法.还是比较简单. 一.必要的准备工作 1.首先需要注册并被审核通过的微信开放平台帐号,然后创建一个移动应用,也需要被审核: 2.然后到资源中心下载开发微信所需的工具: 下载的网址:点击打开链接,有一个是SDK,一个是签名生成工具还有一个范例代码. 3.将SDK文件夹lib下的jar文件libammsdk.jar导入到项目工程中: 4.你的测试手机需要装好微信客户端: 5.在项目的AndroidManifest.xml文件中添加如下的权限: <uses-permis

objective-c-ios 微信第三方登录snsPlatform.loginClickHandler这一句崩溃

问题描述 ios 微信第三方登录snsPlatform.loginClickHandler这一句崩溃 UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToWechatSession]; 全选复制放进笔记 snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControl

iOS微信第三方登录实现_IOS

一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的移动应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程.(注意) 1.下载iOS微信SDK. 下载地址 2.将SDK放到工程目录中. 3.补充导入一些依赖框架. 4.添加URL Types 5.添加iOS9 URL Schemes. 注意:如果

android微信授权登录接口

问题描述 android微信授权登录接口 code已经拿到怎么拿到token请求已经发送出去没有返回,有没有详细的请求函数,新手求助 解决方案 发出数据没有返回你应该先检查你的服务器在外网能不能访问到,你的地址和端口对不对. 解决方案二: 百度友盟.他给你封装好了,你直接拿来用.

C# 求一个微信第三方登录的Demo(一键登录),求贴代码

问题描述 C#求一个微信第三方登录的Demo(一键登录),求贴代码C#求一个微信第三方登录的Demo(一键登录),求贴代码C#求一个微信第三方登录的Demo(一键登录),求贴代码C#求一个微信第三方登录的Demo(一键登录),求贴代码C#求一个微信第三方登录的Demo(一键登录),求贴代码 解决方案 解决方案二:这种帖子是否可以删除啊

oauth-求passport实现微信第三方登录示例

问题描述 求passport实现微信第三方登录示例 使用passport-oauth能够应用在实现微信第三方登录吗,如果哦能的话求一个实例链接.跪谢