在线编程在线课堂在线测评Anycodes在线编程

编程论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

How to use bs4??
本帖最后由 carry0987 于
Double Queue 问题描述 : The new founded Balkan Investment Group Bank (
John 问题描述 : Little John is playing very funny game
linux-command Linux命令大全搜索工具,内容包含Linux命令
Coati 是一款跨平台的代码查看工具,适用于 C/C++ 和 Java。商业软件。特性:1. 索引
系统可承载海量并发,消息收发确认机制 保障消息必达 系统采用动态智
全平台视频监控,支持安卓苹果以及pcweb,支持海康大华等主流dvr,全部源码以及文档 单聊、群聊、商
如何访问类的私有属性? 下面以 TPathData 为例,
问题:从 XE4 以来,Firemonkey 曲线绘图在移动平台不平滑的问题一直令人诟病,提交到官方的 QC 也是族繁不及备载,官方似乎有意的
操作数据库(RODBC)   odbcConnect(dsn, uid="", p
数据模式:mode函数显示任何对象的模式。常见的单个的
系统可承载海量并发,消息收发确认机制 保障消息必达 系统采用动态智
RabbitMQ与PHP(一) 项
Iease团队扩编预备中,盼望能有Ruby或者java工程师加盟。全职兼职都可以。有爱好的伴侣请与我接洽。 邮件:i
ruby 怎么设置装备摆设GTK2,求教指导下!
#include #include #include #include using namespace std; int main() {
标题如图所示: 有n盏灯,编号1~n。一开端灯都是关着的
成熟的消息收发确认机制,支持万人大群 支持开发自定义的消息sdk接口,扩展性超强 支持单/
成熟的消息收发确认机制,支持万人大群 支持开发自定义的消息sdk接口,扩展性超强 支持单/
1. 注意列表和集合的区别 set 列表表现形式: list_1
Ajax   Ajax即“Asynchronous Javascript And
大师好,我比来在做布谷鸟优
分辨提取A和B图像Harris角点,接下来须要对

[精彩分享] Android 微信第三方登录(个人笔记)

[复制链接]
发表于 2016-12-15 08:55:31 | 显示全部楼层 |阅读模式
今天在写微信登录,花了半天时间搞定、然后写下自己的笔记,希望帮助更多的人。。。欢迎各位指教。

微信授权登录,官方说的不是很清楚、所以导致有一部分的坑。
微信注册应用平台的应用签名,下载 微信签名生成工具 输入项目的packageName也可以查看到。
(注意:debug、Release 一定要区分,因为2种生成的微信签名不一致,会导致没有跳转、回调。。。。一般在微信开发者上面注册的是正式环境打包好的、)




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


1. AndroidManifest.xml 权限
  1. <!-- 微信权限--><uses-permission android:name="android.permission.INTERNET"/>
  2. <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.在图一按钮上面,加上微信跳转方法、也就是启动微信登录的方法
  1. private void loginToWeiXin(){
  2.         IWXAPI mApi = WXAPIFactory.createWXAPI(this, WXEntryActivity.WEIXIN_APP_ID, true);
  3.         mApi.registerApp(WXEntryActivity.WEIXIN_APP_ID);
  4.         if (mApi != null && mApi.isWXAppInstalled()) {
  5.             SendAuth.Req req = new SendAuth.Req();
  6.             req.scope = "snsapi_userinfo";
  7.             req.state = "wechat_sdk_demo_test_neng";
  8.             mApi.sendReq(req);
  9.         } else
  10.             Toast.makeText(this, "用户未安装微信", Toast.LENGTH_SHORT).show();
  11.     }
复制代码

3.在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity
package(项目报名).wxapi.WXEntryActivity.Java
回调方法onResp() 方法没有触发回调、请监测WXEntryActivity onCreate中是否调用此方法  mApi.handleIntent(this.getIntent(), this);
  1. package com.xxx.xxxx.android.wxapi;
  2. /**
  3. * 微信登录页面
  4. * @author kevin_chen 2016-12-10 下午19:03:45
  5. * @version v1.0
  6. */
  7. public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
  8.     private static final String APP_SECRET = "填写自己的AppSecret";
  9.     private IWXAPI mWeixinAPI;
  10.     public static final String WEIXIN_APP_ID = "填写自己的APP_id";
  11.     private static String uuid;
  12.     @Override
  13.     public void onCreate(Bundle savedInstanceState) {
  14.         super.onCreate(savedInstanceState);
  15.         mWeixinAPI = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID, true);
  16.         mWeixinAPI.handleIntent(this.getIntent(), this);
  17.     }
  18.     @Override
  19.     protected void onNewIntent(Intent intent) {
  20.         super.onNewIntent(intent);
  21.         setIntent(intent);
  22.         mWeixinAPI.handleIntent(intent, this);//必须调用此句话
  23.     }
  24.     //微信发送的请求将回调到onReq方法
  25.     @Override
  26.     public void onReq(BaseReq req) {
  27.         LogUtils.log("onReq");
  28.     }
  29.     //发送到微信请求的响应结果
  30.     @Override
  31.     public void onResp(BaseResp resp) {
  32.         LogUtils.log("onResp");
  33.         switch (resp.errCode) {
  34.         case BaseResp.ErrCode.ERR_OK:
  35.             LogUtils.log("ERR_OK");
  36.             //发送成功
  37.             SendAuth.Resp sendResp = (SendAuth.Resp) resp;
  38.             if (sendResp != null) {
  39.                 String code = sendResp.code;
  40.                 getAccess_token(code);
  41.             }
  42.             break;
  43.         case BaseResp.ErrCode.ERR_USER_CANCEL:
  44.             LogUtils.log("ERR_USER_CANCEL");
  45.             //发送取消
  46.             break;
  47.         case BaseResp.ErrCode.ERR_AUTH_DENIED:
  48.             LogUtils.log("ERR_AUTH_DENIED");
  49.             //发送被拒绝
  50.             break;
  51.         default:
  52.             //发送返回
  53.             break;
  54.         }
  55.     }
  56.     /**
  57.      * 获取openid accessToken值用于后期操作
  58.      * @param code 请求码
  59.      */
  60.     private void getAccess_token(final String code) {
  61.         String path = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
  62.                 + WEIXIN_APP_ID
  63.                 + "&secret="
  64.                 + APP_SECRET
  65.                 + "&code="
  66.                 + code
  67.                 + "&grant_type=authorization_code";
  68.         LogUtils.log("getAccess_token:" + path);
  69.         //网络请求,根据自己的请求方式
  70.         VolleyRequest.get(this, path, "getAccess_token", false, null, new VolleyRequest.Callback() {
  71.             @Override
  72.             public void onSuccess(String result) {
  73.                 LogUtils.log("getAccess_token_result:" + result);
  74.                 JSONObject jsonObject = null;
  75.                 try {
  76.                     jsonObject = new JSONObject(result);
  77.                     String openid = jsonObject.getString("openid").toString().trim();
  78.                     String access_token = jsonObject.getString("access_token").toString().trim();
  79.                     getUserMesg(access_token, openid);
  80.                 } catch (JSONException e) {
  81.                     e.printStackTrace();
  82.                 }
  83.             }
  84.             @Override
  85.             public void onError(String errorMessage) {
  86.             }
  87.         });
  88.     }
  89.     /**
  90.      * 获取微信的个人信息
  91.      * @param access_token
  92.      * @param openid
  93.      */
  94.     private void getUserMesg(final String access_token, final String openid) {
  95.         String path = "https://api.weixin.qq.com/sns/userinfo?access_token="
  96.                 + access_token
  97.                 + "&openid="
  98.                 + openid;
  99.         LogUtils.log("getUserMesg:" + path);
  100.         //网络请求,根据自己的请求方式
  101.         VolleyRequest.get(this, path, "getAccess_token", false, null, new VolleyRequest.Callback() {
  102.             @Override
  103.             public void onSuccess(String result) {
  104.                 LogUtils.log("getUserMesg_result:" + result);
  105.                 JSONObject jsonObject = null;
  106.                 try {
  107.                     jsonObject = new JSONObject(result);
  108.                     String nickname = jsonObject.getString("nickname");
  109.                     int sex = Integer.parseInt(jsonObject.get("sex").toString());
  110.                     String headimgurl = jsonObject.getString("headimgurl");
  111.                  
  112.                     LogUtils.log("用户基本信息:");
  113.                     LogUtils.log("nickname:" + nickname);
  114.                     LogUtils.log("sex:" + sex);
  115.                     LogUtils.log("headimgurl:" + headimgurl);
  116.                 } catch (JSONException e) {
  117.                     e.printStackTrace();
  118.                 }
  119.                 finish();
  120.             }
  121.             @Override
  122.             public void onError(String errorMessage) {
  123.             }
  124.         });
  125.     }
  126. }
复制代码

5.在 AndroidManifest.xml 设置注册微信的页面
当授权时候进入WXEntryActivity、当前背景可能是黒或白,为了不影响用户体验,可以把当前Activity设置为透明:
android:theme="@android:style/Theme.Translucent"
  1. <!--注册微信回调 WXEntryActivity -->
  2. <activity
  3.     android:name=".wxapi.WXEntryActivity"
  4.     android:exported="true"
  5.     android:label="@string/app_name"
  6.     android:launchMode="singleTop"
  7.     android:theme="@android:style/Theme.Translucent" />
复制代码




具体可参考:微信授权登录取用户信息步骤
在线编程(http://www.anycodes.cn)&编程论坛(http://www.52exe.cn)感谢您的支持!
回复

使用道具 举报

发表于 2017-11-17 20:02:59 来自手机 | 显示全部楼层
老师能教我吗
在线编程(http://www.anycodes.cn)&编程论坛(http://www.52exe.cn)感谢您的支持!
回复 支持 反对

使用道具 举报

发表于 2018-9-3 15:22:57 来自手机 | 显示全部楼层
老师能教我吗?
在线编程(http://www.anycodes.cn)&编程论坛(http://www.52exe.cn)感谢您的支持!
回复 支持 反对

使用道具 举报

发布主题 上个主题 下个主题 快速回复 返回列表 官方QQ群
在线客服
客 服 中 心
群 机 器 人
网站二维码
收 起 客 服

QQ|Archiver|手机版|小黑屋|Anycodes ( ICP14002806Anycodes在线编程

GMT+8, 2018-11-15 04:47 , Processed in 2.577877 second(s), 72 queries .

Powered by Anycodes

© 2001-2013 吉林市群龙科技有限公司 Inc.

快速回复 返回顶部 返回列表