Android 接入 企业微信三方登录
接入企业微信登录的正向流程
- 第一点就是去注册应用(注册的时候注意他的应用信息是使用他的签名工具下载下来,安装到你的手机上面,你把你得应用通过签名也安装上面,打开签名工具输入你的App包名,就会生成,复制出来就好)
- 打开文档微信官方文档,根据他的 一步一步走,正常就没问题了,不正常出现问题就看下面
我接入的代码,可以直接使用(建议还是去官方文档去写哈,要是不知道哪些是多余代码,可以按照我这个保留)
注意事项:需要去官网拿lib包并且引入!!!!
引入方式看版本,我得gradle版本是8.3.1 我的引入方式如下
implementation files('libs/lib_wwapi-2.0.12.11.aar')
以下是根据文档写的
这是manifest部分
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
就单纯增加下面这一条就行 需要注意这个好像是Android 30版本 才支持queries(我记得是哈,有错误随时更正)
<queries>
<package android:name="com.tencent.wework" />
</queries>
</manifest >
这是代码部分
private IWWAPI iwwapi;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
iwwapi = WWAPIFactory.createWWAPI(this);
iwwapi.registerApp( authBean.getSchema());
}
//使用时候随时调用这个方法就行
private void toWxLogin() {
WWMediaText txt = new WWMediaText();
final WWAuthMessage.Req req = new WWAuthMessage.Req();
req.sch = authBean.getSchema();
req.appId = authBean.getAppId();
req.agentId = authBean.getAgentId();
req.state = "dd";
iwwapi.sendMessage(req, new IWWAPIEventHandler() {
@Override
public void handleResp(BaseMessage resp) {
if (resp instanceof WWAuthMessage.Resp) {
WWAuthMessage.Resp rsp = (WWAuthMessage.Resp) resp;
if (rsp.errCode == WWAuthMessage.ERR_CANCEL) {
Toast.makeText(MainActivity.this, "登录取消", Toast.LENGTH_SHORT).show();
} else if (rsp.errCode == WWAuthMessage.ERR_FAIL) {
Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
} else if (rsp.errCode == WWAuthMessage.ERR_OK) {
//rsp.code 就是咱们需要的code的了
Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
}
}
}
});
}
//为什么要重载这个,需要你看下面第二个问题,就知道为啥了
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
最近这几天接入了一下企业微信三方登录总共遇到了几个问题
一、 就是出现吐司 ’没有此权限‘ 返 errCode:5 errMsg: no priveleges,这个有三种解决问题方案,看看以下图片,是从企业微信社区回答截取来的
也就说问题有三种
我是错在第一点(应用签名正确的是签名工具生成的,而我的是使用的SHA1)
说一下验证方法
- 管理端生成的sch appId agentId 查看是否正确
- 调用 getPackageName()方法获取出来包名并打印查看是否正确
- 确定你所注册的 企业微信登录应用的企业 和 企业微信App登录的企业是一个企业
二、这个是handleResp回调后出现异常,而且没有人遇到这个问题,然后排查demo,最后发现 demo中多了一个onActivityResult方法,最开始没注意因为他demo里面onActivityResult里面写了一些分享功能,所以最开始没有在意(说了这么多总结就是重载一下onActivityResult()方法,里面什么都不用写)
三、出现了以下的错误
com.dw.phone: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED
should be specified when a receiver isn't being registered exclusively for system broadcasts
在搜索网上内容和排查发现好像是因为我现在的是Android 14 ,但是企业微信aar文件中WWAPIImpl.registerApp()初始化会有两个实现方法
public boolean registerApp(String var1) {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addDataScheme(var1);
intentFilter.addAction(var1);
this.context.registerReceiver(this.mReciver, intentFilter);
this.schema = var1;
return true;
}
public boolean registerApp(String var1) {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addDataScheme(var1);
intentFilter.addAction(var1);
this.context.registerReceiver(this.mReciver, intentFilter);
this.schema = var1;
return true;
}
在android 14中
Android 14 升级,动态注册广播接收器,需要flag的参数,
ContextCompat.RECEIVER_EXPORTED表示接收其他app发送的intent
//案例
this.context.registerReceiver(this.mReciver ,intentFilter,ContextCompat.RECEIVER_EXPORTED);
//但是企业微信提供的是
this.context.registerReceiver(this.mReciver, intentFilter);
在android 14中缺少参数,所以报错
可能更改结果就是版本 34 => 33