文档章节

关于使用微信登录第三方APP的实现(Android版)

crazymus
 crazymus
发布于 2015/10/23 12:32
字数 662
阅读 26645
收藏 8

使用微信登录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文件夹中,就一个文件:

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中。

 

© 著作权归作者所有

共有 人打赏支持
crazymus

crazymus

粉丝 67
博文 70
码字总数 106718
作品 8
程序员
Android使用友盟集成QQ、微信、微博等第三方登录

前言 最近项目需要加入第三方分享和登录功能,之前其他项目的第三方分享和登录一直都使用ShareSDK实现的。为了统一使用友盟的全家桶,所以三方分享和登录也就选择了友盟。这里记录一下完整的...

慕前端7069444
05/21
0
0
Android APP打开另一个APP完整逻辑实现

本文出自:https://blog.csdn.net/DT235201314/article/details/80255143 一丶概述 前段时间配合开发,完成了一个APP拉起另一个APP的需求,负责接收数据跨登录部分。当然整个实现思路挺感兴趣...

天一方蓝
05/10
0
0
基于Google Flutter的开源中国客户端,支持Android与iOS

FlutterOSC 基于Google Flutter的开源中国客户端,支持Android和iOS。 码云戳这里 GitHub戳这里 关于Google Flutter Android扫码下载APK 请使用手机浏览器扫码下载,不要使用微信或者qq扫码 ...

我遇见谁_会有怎样的对白
05/09
0
0
Fluwx:微信SDK在Flutter上的实现

前言 随着 Flutter越来越火热,我相信越来越多的小伙伴都跃跃欲试。但是一个很重要的问题是,很多第三方 SDK,如微信SDK,都无法在Flutter上直接使用。所以,我这几天开发了一个微信SDK的插件...

JarvanMo
08/19
0
0
Android开发:使用EasyPay打造全能移动支付框架

前言 在这之前,笔者发布了两篇移动app支付相关博文,得到一些关注,但是由于博文中代码零碎,有些读者私信博主,以及加笔者qq咨询相关问题。考虑到这些,笔者把之前项目中的支付相关代码从业...

MichaelX
07/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

最全最强解析:支付宝钱包系统架构内部剖析(架构图)

支付宝系统架构概况 典型处理默认 资金处理平台 财务会计 支付清算 核算中心 交易 柔性事务 支付宝的开源分布式消息中间件–Metamorphosis(MetaQ) Metamorphosis (MetaQ) 是一个高性能、高可...

晨猫
38分钟前
4
0
竞品分析

那什么样的场景需要用关键纬度分析法分析竞品呢? 竞品分析的目的是为了看竞品们和自己产品重合的业务都具备哪些功能点,以及这些功能是怎么做的,以此确定自己产品的优化方向。 竞品们的业务...

于谦老师
45分钟前
1
0
OSChina 周三乱弹 —— 公司女同事约我

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享水木年华的单曲《蝴蝶花(2002年大提琴版)》 《蝴蝶花(2002年大提琴版)》- 水木年华 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
1K
17
Linux环境搭建 | VMware下共享文件夹的实现

在进行程序开发的过程中,我们经常要在主机与虚拟机之间传递文件,比如说,源代码位于虚拟机,而在主机下阅读或修改源代码,这里就需要使用到 「共享文件」 这个机制了。本文介绍了两种共享文...

良许Linux
今天
9
0
JUC锁框架——AQS源码分析

JUC锁介绍 Java的并发框架JUC(java.util.concurrent)中锁是最重要的一个工具。因为锁,才能实现正确的并发访问。而AbstractQueuedSynchronizer(AQS)是一个用来构建锁和同步器的框架,使用A...

长头发-dawn
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部