其实也挺简单的,那为什么还写呢,还不是因为微信文档写的不清不楚。。

1、创建应用

  1. 管理员登录企业微信管理后台,选择企业应用
  2. 选择已有应用或添加应用,进入应用详情页面。
  3. 选择“企业微信授权登录”,在设置界面填写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参数,而是要AppidSecret就行,亲测可以,这微信文档写的真是一言难尽。。一直以来也是受业界诟病多年。。

好了,既然移动端也可以拿到access_token,那就可以加上code直接拿到UserId,并传给后台。

当然,也可以在拿到code的时候就传给后台,剩下的让后台去获取也是一样的。

至于access_token为什么放在服务端API的菜单下,我略微翻看了下服务端的接口,大多都是只要access_token参数就行了,我想这也是为了方便吧,其次也是为了安全,主要还是文档写的不行。


更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. Python技巧匿名函数、回调函数和高阶函数
  3. python list.sort()根据多个关键字排序的方法实现
  4. 寻找卓越的(Android)软件工程师,可解你燃眉之急
  5. Android中可以做的两件坏事---破解锁屏密码和获取Wifi密码
  6. 【Android】利用Fiddler进行抓包详解教程。抓取接口以及数据,可以
  7. Android(安卓)获取View的位置参数:x,y和相对父容器的偏移量以及中
  8. Android(安卓)NDK打印log到logcat的方法
  9. 修改标题栏的高度

随机推荐

  1. android直接读取项目中的sqlite数据库
  2. Android系列教程(二)
  3. Android中的资源与国际化!
  4. 如何降低android应用程序的耗电量
  5. Android(安卓)JIT带来的虚拟机崩溃问题及
  6. Android(安卓)匿名共享内存C++接口分析
  7. 开始在Windows上开发Android
  8. Android中日期操作总结
  9. 转载 Android(安卓)脚本设计之 SL4A
  10. conversion to dalvik format failed wit