一、需求说明
目前项目需要用App唤起企业微信完成授权登录,但是uniapp官方没有内置的企业微信SDK,所以需要我们手动去封装安卓原生插件,亲测可用,目前只有该方法能完成企业微信授权登录,企业微信开发文档的JS-JDK和WECOM-JDK只能实现扫码登录,不推荐该方法
二、开发准备
1.Android Studio 版本不低于4.1.1
2.去企业微信开发者平台下载安卓SDK,该文件为.aar类型
3.去Hbuildx官网下载对应版本的SDK
三、uniapp交互
1.授权成功后会拿到企业微信的回调参数code,把这个code传给后端,后端会根据code查询用户的企业微信账号信息,然后返回给前端,完成登录
下面是安卓的代码,因为今天星期五没时间将文档写详细,后续会将文档补全
package com.example.mylibrary;
import android.content.Context;
import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;
import com.tencent.wework.api.IWWAPI;
import com.tencent.wework.api.IWWAPIEventHandler;
import com.tencent.wework.api.WWAPIFactory;
import com.tencent.wework.api.model.WWAuthMessage;
import com.tencent.wework.api.model.WWMediaMergedConvs;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class WxLogin extends UniModule {
IWWAPI iwwapi;
int stringId;
private String APPID = "WW5ce2489834f4ac82";
private String AGENTID = "1000016";
private String STATE = "1000016";
private String SCHEMA = "WW5ce2489834f4ac82";
WWMediaMergedConvs wmc = new WWMediaMergedConvs();
@UniJSMethod(uiThread = true)
public void register(String schema, String appid, String agentid, String state) {
if (iwwapi == null) {
APPID = appid;
AGENTID = agentid;
SCHEMA = schema;
STATE = state;
Context context = mUniSDKInstance.getContext();
iwwapi = WWAPIFactory.createWWAPI(context);
iwwapi.registerApp(schema);
}
}
@UniJSMethod(uiThread = true)
public void login(UniJSCallback callback){
try {
final WWAuthMessage.Req req = new WWAuthMessage.Req();
req.sch = SCHEMA;
req.appId = APPID;
req.agentId = AGENTID;
req.state = STATE;
Map<String, Object> data = new HashMap<>();
IWWAPIEventHandler handler = resp -> {
if (resp instanceof WWAuthMessage.Resp) {
WWAuthMessage.Resp rsp = (WWAuthMessage.Resp) resp;
if (rsp.errCode == WWAuthMessage.ERR_OK) {
data.put("msg", "登录成功");
data.put("code", rsp.code);
} else if (rsp.errCode == WWAuthMessage.ERR_CANCEL) {
data.put("msg", "用户取消登录");
data.put("code", -1);
} else if (rsp.errCode == WWAuthMessage.ERR_FAIL) {
data.put("msg", "登录失败");
data.put("code", 1);
}
}
callback.invoke(data);
};
iwwapi.sendMessage(req, handler);
} catch(Exception e){
Map<String, Object> errorData = new HashMap<>();
errorData.put("error", "An error occurred:" + e.getMessage());
callback.invoke(errorData);
}
}
}