其實也挺簡單的,那爲什麼還寫呢,還不是因爲微信文檔寫的不清不楚。。
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參數就行了,我想這也是爲了方便吧,其次也是爲了安全,主要還是文檔寫的不行。