前言
在如今的企业级应用开发中,接入微信生态已经成为标配。特别是对于内部使用的办公 APP,接入企业微信授权登录不仅能提高员工的登录效率,还能打通企业内部的组织架构。
最近在做一个 Android 项目(店务助手),需要集成企业微信登录功能。原以为和微信开放平台登录一样简单,结果在配置环节踩了不少坑。今天特意整理了一份完整的流程,手把手教大家在 Android APP 中拉起企业微信登录。
第一步:后台应用配置(核心关键)
很多开发者拿到需求直接就开始写代码,这是大忌。企业微信登录必须在管理后台进行严格配置,否则 APP 端会报错(如 openid 获取失败)。
1. 开启授权登录接口
首先,登录企业微信管理后台,进入 「应用管理」->「应用」。找到你需要集成的自建应用。
在应用的详情页下方,找到 「开发者接口」 板块。这里我们需要重点关注 「企业微信授权登录」 这一项。
注意: 默认情况下它可能是未开启状态。你需要点击进入并开启该功能,同时配置好可信域名(如果涉及网页开发)。对于纯 APP 登录,确保这里的“已启用”状态是亮起的。
如下图所示:
(图 1:在开发者接口中启用“企业微信授权登录”)
2. 获取核心凭证:AgentId 和 Secret
开启功能后,返回应用详情页。在页面上方,你会看到两个至关重要的参数:
- AgentId:应用的唯一标识。
- Secret:应用的密钥(点击“查看”获取)。
这两个参数是 APP 端换取 code 以及服务端换取 access_token 的钥匙,请务必保存好。
(图 2:获取应用的 AgentId 和 Secret)
3. 获取企业 ID (CorpId)
除了应用级的参数,我们还需要企业级的 ID。点击左侧菜单栏的 「我的企业」,在右侧信息栏的最下方,找到 「企业 ID」(通常以 ww 或 wx 开头)。
这个 ID 是全局唯一的,APP 初始化 SDK 时需要用到。
(图 3:在“我的企业”中查看企业 ID)
第二步:Android 端集成 SDK
配置工作完成后,我们进入 Android 开发环节。
1. 引入依赖
企业微信提供了专门的 SDK。你可以从企业微信开放平台下载 JAR 包,或者通过 Maven 仓库引入。
如果是本地集成,将 [lib_wwapi-3.0.0.7.aar](https://dldir1.qq.com/wework/wwopen/client_sdk/android/lib_wwapi-3.0.0.7.aar) 放入 libs` 目录并 Add as Library。
2. 初始化 SDK
建议在 Application 的 onCreate 中进行初始化,或者在使用前初始化。
// 注册应用到企业微信
private static final String APPID = "WW1e933be11645237c";
private static final String AGENTID = "1000012";
private static final String SCHEMA = "wwauth1e933be11645237c000012";
private IWXAPI iwwapi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
stringId = getApplicationInfo().labelRes;
iwwapi = WWAPIFactory.createWWAPI(this);
iwwapi.registerApp(SCHEMA);
}
3. 发起登录请求
在你的登录页面,添加点击事件,发送登录授权请求。
WWMediaText txt = new WWMediaText(((EditText) findViewById(R.id.et3)).getText().toString());
txt.appPkg = getPackageName();
txt.appName = getString(stringId);
txt.appId = APPID;
txt.agentId = AGENTID;
iwwapi.sendMessage(txt);
4. 处理回调
这里是最容易出错的地方。企业微信的回调 Activity 是 WXEntryActivity。
关键点:
- 包名必须严格对应:
你的包名.wxapi.WXEntryActivity - 并在
AndroidManifest.xml中注册该 Activity,设置exported="true"。
final WWAuthMessage.Req req = new WWAuthMessage.Req();
req.sch = SCHEMA;
req.appId = APPID;
req.agentId = AGENTID;
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) {
Toast.makeText(MainActivity.this, "登录成功:" + rsp.code,
Toast.LENGTH_SHORT).show();
}
}
}
});
第三步:常见问题与避坑指南
-
回调不响应? 检查
WXEntryActivity的路径是否完全正确(包名+wxapi),且必须在AndroidManifest.xml中配置android:exported="true"。 -
Scope 报错? 确保后台应用可见范围包含了当前测试用户的账号。
-
Secret 泄露风险? 切记!
Secret绝对不要放在 Android 客户端代码中。Android 端只负责拉取code,然后传给自己的服务器,由服务器拿着code+Secret去企业微信服务器换取用户信息。
结语
企业微信登录的集成流程整体来说比标准微信登录稍微繁琐一点,主要是后台配置的细节较多。只要对照着图 1、2、3 把 CorpId、AgentId、Secret 配置无误,代码端的逻辑其实非常标准化。
希望这篇软文能帮到正在做 Android 企业级应用开发的你!如果有遇到其他坑,欢迎在评论区交流。