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