Android(安卓)企业微信登录 接入指南
16lz
2021-12-04
其实也挺简单的,那为什么还写呢,还不是因为微信文档写的不清不楚。。
1、创建应用
- 管理员登录企业微信管理后台,选择
企业应用
。 - 选择已有应用或添加应用,进入应用详情页面。
- 选择“企业微信授权登录”,在设置界面填写Android的 App的
签名&包名
,设置完成后系统自动生成应用程序schema
。
这里要注意了,本地签名和线上签名可能会不一样,从而导致 没有此权限 调不起来企业微信授权,所以建议debug模式也用正式签名。
app>build.gradle:
android { ... signingConfigs { release { storeFile file("aaa") storePassword "aaa" keyAlias "aaa" keyPassword "aaa" } } buildTypes { debug { signingConfig signingConfigs.release } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } ...}
以上aaa参数自行修改即可。
2、导SDK
官方提供的是一个zip的压缩包,可以解压以module的方式导入。我是下载的Demo,然后在demo中拷的jar包,放在libs目录下并As a Library
。
3、初始化
即注册到企业微信,非常简单,就几行代码,注意参数别弄混了就行。
IWWAPI iwwapi;private static final String APPID = "WW1e933be11645237c";private static final String AGENTID = "1000012";private static final String SCHEMA = "wwauth1e933be11645237c000012"; private void registerApp() { iwwapi = WWAPIFactory.createWWAPI(this); iwwapi.registerApp(SCHEMA); }
registerApp()方法可以是在onCreate
中调用,也可以是别的地方,看自己需求。
4、发起授权
private void wxLogin() { final WWAuthMessage.Req req = new WWAuthMessage.Req(); req.sch = SCHEMA; req.appId = APPID; req.agentId = AGENTID; req.state = "dd"; iwwapi.sendMessage(req, resp -> { if (resp instanceof WWAuthMessage.Resp) { WWAuthMessage.Resp rsp = (WWAuthMessage.Resp) resp; if (rsp.errCode == WWAuthMessage.ERR_CANCEL) { ToastUtil.showCenterToast("登录取消"); } else if (rsp.errCode == WWAuthMessage.ERR_FAIL) { ToastUtil.showCenterToast("登录失败"); } else if (rsp.errCode == WWAuthMessage.ERR_OK) { ToastUtil.showCenterToast("登录成功:" + rsp.code); } } }); }
state 参数不是必传。
成功的情况下才可以拿到code。
到此就差不多了,把code
传给后台就可以了。
为什么这么说呢,因为文档说code
可以换取access_token
,然后code加access_token可以获取UserId
,而实际上根本没有获取access_token的方法,因为获取方法在服务端API
的菜单下,而且还不需要code参数,而是要Appid
和Secret
就行,亲测可以,这微信文档写的真是一言难尽。。一直以来也是受业界诟病多年。。
好了,既然移动端也可以拿到access_token,那就可以加上code直接拿到UserId,并传给后台。
当然,也可以在拿到code的时候就传给后台,剩下的让后台去获取也是一样的。
至于access_token为什么放在服务端API的菜单下,我略微翻看了下服务端的接口,大多都是只要access_token参数就行了,我想这也是为了方便吧,其次也是为了安全,主要还是文档写的不行。
更多相关文章
- mybatisplus的坑 insert标签insert into select无参数问题的解决
- Python技巧匿名函数、回调函数和高阶函数
- python list.sort()根据多个关键字排序的方法实现
- 寻找卓越的(Android)软件工程师,可解你燃眉之急
- Android中可以做的两件坏事---破解锁屏密码和获取Wifi密码
- 【Android】利用Fiddler进行抓包详解教程。抓取接口以及数据,可以
- Android(安卓)获取View的位置参数:x,y和相对父容器的偏移量以及中
- Android(安卓)NDK打印log到logcat的方法
- 修改标题栏的高度