華為帳號服務(Account Kit)為開發者提供簡單、安全的登錄授權功能,用戶不必輸入帳號、密碼和繁瑣驗證,就可以通過華為帳號快速登錄應用,即刻使用App。這篇文章收集了開發者們集成華為帳號服務中會遇到的典型問題,並給出瞭解決方法,希望為其他遇到類似問題的開發者提供參考。 1 .redirect_ ...
華為帳號服務(Account Kit)為開發者提供簡單、安全的登錄授權功能,用戶不必輸入帳號、密碼和繁瑣驗證,就可以通過華為帳號快速登錄應用,即刻使用App。這篇文章收集了開發者們集成華為帳號服務中會遇到的典型問題,並給出瞭解決方法,希望為其他遇到類似問題的開發者提供參考。
1 .redirect_url是什麼,如何配置回調地址
(1)回調地址redirect_rul不需要是真實的頁面地址,redirect_rul是OAuth2.0協議定義的一個用來做以下用途的虛擬地址,用戶配置一個https://xxxx類似的自定義字元串就好了。
(最好根據自己業務屬性定義一個有意義的字元串)
(2)在OAuth2.0協議中redirect_url的用途如下:
如果是web應用,OAuth伺服器授權後,會回調跳轉到這個地址。web應用需要攔截這個回調地址來接收Auth Code。獲取AT的時候,要把回調地址作為參數傳回,OAuth伺服器會校驗回調地址和code是匹配的,否則返回錯誤碼。
(3)如何設置redirect_url? 參見官網文檔說明
2 .openId、unionId有什麼區別?
openId:同一個用戶,不同應用,openId值不同,單個應用內唯一。
unionId:開發者帳號ID,同一個用戶,同一個開發者帳號下管理的不同應用,unionId相同。
應用接入華為帳號登錄可以獲取到OpenId(同一個用戶的不同應用,OpenId值不同),使用OpenId標識用戶,多個應用之間同一個華為帳號用戶在開發者系統內會被標識為多個用戶。如果開發者希望在多個應用之間標識用戶的唯一性,可以使用UnionId(對於同一個用戶,同一個開發者帳號下管理的不同應用,UnionId值相同)。特別註意的是,標識用戶唯一性的應用必須是在同一個開發者帳號下管理,一個應用轉移到另外一個帳號後,UnionId值也會變化。
3. 怎樣判斷帳號是否已登錄?
通過silentSignIn介面,調用到onSuccess裡面並且拿到的authAccount不為空則說明回調成功,帳號是已登錄狀態。
Task<AuthAccount> task = service.silentSignIn();
task.addOnSuccessListener(new OnSuccessListener<AuthAccount>() {
@Override
public void onSuccess(AuthAccount authAccount) {
if(null != authAccount) {
showLog("success ");
}
}
});
4 .調用服務端介面user.getTokenInfo介面報錯invalid session
(1)排查傳參是否正確
(2)access_token需要UrlEncode一下,不然裡面有特殊符號的解析就會報invalid session
介面文檔:
5 .調用oauth2/v3/token介面,redirect_uri是否必傳
(1)使用Authorization Code換取Access_Token、Refresh Token、ID Token,這個參數是必須要傳入的
(2)使用Refresh Token獲取新的Access Token,redirect_url不需要傳
參考官網文檔
6. Authorization Code 、Access Token、Refresh Token的有效期分別是多久?
Authorization Code的有效期是5分鐘,該code是一次性的,申請後使用一次之後就會失效。
Access Token的有效期是1小時。
Refresh Token Token當前預設有效期180天。
7. 常見錯誤碼分析
7.1 錯誤碼:907135700
該錯誤碼說明調用網關查詢應用scope失敗,可以排查下麵幾項:
1.排查設備網路是否有問題,一般是當前網路不可用或者當前網路無法正常訪問scope下載站點,比如防火牆限制等。
2.檢查自己的appId是否在開發者聯盟上面已經註冊
3.可能是手機時間錯誤,誤認為SSL證書過期,從而無法下載scope以致鑒權失敗。
7.2 錯誤碼:907135701
該錯誤碼說明openGW沒有配置scope,appid沒有申請許可權,或者環境和appid不匹配導致,可以排查下麵幾項:
1.檢查自己的appId是否在開發者聯盟上面已經註冊
2.查看agconnect-services.json 文件中的app_id是否跟AGC平臺上的appid一致;
3.查看agconnect-services.json文件是否在工程的app目錄下,agconnect-services.json文件必須在app目錄下,如下圖所示:
4.查看appId和HMS spk環境是否匹配,同是商用環境或者測試環境
7.3 錯誤碼:907135702
該錯誤碼說明openGW沒有配置指紋證書,請在開發者聯盟上配置指紋證書,可以排查以下幾點:
1.檢查自己的appId是否在開發者聯盟上面已經註冊
2.SHA256指紋是否在聯盟上配置,可以參考官網文檔
7.4 錯誤碼:6003
該錯誤碼說明證書指紋校驗不匹配,需要檢查當前客戶端應用打包的證書簽名是否與AppGallery Connect網站上配置的簽名一致。
1.打開應用的APK,將其中“META-INF”文件夾解壓出來,得到其中的“CERT.RSA”文件,通過keytool -printcert -file META-INF/CERT.RSA命令列印簽名證書信息。
2.登錄AppGallery Connect,單擊“我的項目”,選擇需要操作項目,進入項目頁面後選擇應用,然後在“項目設置 >常規”中檢查“SHA256證書指紋”配置的信息是否與步驟1)的指紋一致。
證書配置可以參考官網文檔
瞭解更多詳情>>
訪問華為開發者聯盟官網
獲取開髮指導文檔
華為移動服務開源倉庫地址:GitHub、Gitee
關註我們,第一時間瞭解 HMS Core 最新技術資訊~