問題描述
開發人員在完成基本接入後,嘗試開啟 H5 應用,但容器頁面顯示錯誤提示“系統繁忙,請稍候再試”。
常見原因
mPaaS 架構在開啟一個 H5 應用前,首先需要獲知該應用離線包的基本資料,因此用戶端會主動通過 RPC 介面 alipay.client.getUnionResource 去拉取離線包資訊。如果離線包資訊擷取失敗,或沒有命中要開啟的目標應用,容器會提示錯誤 “系統繁忙,請稍候再試”。針對這類問題,排查方向包括:檢查 RPC 請求是否正常、檢查環境和離線包發布是否匹配等。
問題排查步驟
檢查 RPC 請求是否正常
如 常見原因 所述,用戶端需要主動拉取離線包資訊,而拉取過程依賴 RPC 請求,如果 RPC 鏈路存在問題,則無法正常擷取離線包資訊,導致載入失敗。要確認 RPC 請求是否存在問題,需要在 Xcode 控制台中搜尋 alipay.client.getUnionResource 觀察 RPC 請求是否正常返回。如果存在錯誤,一般的錯誤碼包括 7XXX 或 3XXX 系列等,例如:
正常返回範例(
result-status為 1000):Demo[83767:2555863] [mPaaSLog] APMobileNetwork alipay.client.getUnionResource resp:{ "Content-Encoding" = gzip; "Content-Type" = "text/plain;charset=UTF-8"; Date = "Tue, 11 Aug 2020 05:01:37 GMT"; Vary = "Accept-Encoding"; "mgw-traceid" = 0a1cfd401597122097726853822435; "result-status" = 1000; "server-time" = 1597122097739; }錯誤返回範例(
result-status不為 1000):Demo[83383:2546279] [mPaaSLog] APMobileNetwork alipay.client.getUnionResource resp:{ "Content-Length" = 0; "Content-Type" = "text/plain;charset=UTF-8"; Date = "Tue, 11 Aug 2020 04:50:08 GMT"; memo = "%E9%AA%8C%E7%AD%BERPC%E6%8E%A5%E5%8F%A3%20%E5%8A%A0%E7%AD%BE%E6%95%B0%E6%8D%AE%E4%B8%BA%E7%A9%BA"; "mgw-traceid" = 0a1d7667159712140890222728553; "result-status" = 7014; "server-time" = 1597121408902; tips = "%E9%AA%8C%E7%AD%BERPC%E6%8E%A5%E5%8F%A3%20%E5%8A%A0%E7%AD%BE%E6%95%B0%E6%8D%AE%E4%B8%BA%E7%A9%BA"; }
RPC 7XXX 系列錯誤的處理方法
參考文檔 網關結果碼說明,7XXX 類錯誤均與 RPC 請求的簽名驗證過程有關,常見錯誤碼及原因如下:
錯誤碼 | 描述 | 解釋 |
7000 | 沒有設定公開金鑰 | 移動 APP 中的無線保鏢中無 appId 對應的密鑰或者網關無法擷取 appId 對應的簽名密鑰。 |
7001 | 驗簽的參數不夠 | 網關服務端驗證簽名不通過。 |
7002 | 驗簽失敗 | 網關服務端驗證簽名不通過。 |
7003 | 驗簽-時效性失敗 | API 請求入參 ts 時間戳記超過系統設定的時間有效性。需要檢查用戶端時間是否為系統時間。 |
7007 | 驗簽-缺少 ts 參數 | API 請求缺少驗簽 ts 參數。 |
7014 | 驗簽-缺少 sign 參數 | API 請求缺少驗簽 sign 參數。一般情況下是用戶端簽名資料失敗,導致缺失 sign 參數。請檢查用戶端無線保鏢圖片是否正確。 |
基本排查動作如下:
檢查 mPaaS 控制台設定的 Bundle ID 與 iOS 工程是否完全一致,包括:
mPaaS 控制台(控制台 > 代碼配置 > iOS)上設定的 Bundle ID。
工程的 Bundle Indentifier。
工程中
Info.plist的 Bundle Indentifier。
檢查控制台下載的
.config檔案內容與專案中的meta.config是否完全一致:mPaaS 控制台下載的
.config檔案。工程中的
meta.config檔案。
用戶端裝置的時間是否為目前時間,時間誤差必須小於 8 小時。
專有雲開發人員需要注意,無線保鏢圖片需要手動產生並放到工程中。公用雲端(aliyun.com)開發人員請忽略。
如果上述檢查存在資訊不一致,則檢查不通過,建議:
修改工程中的資訊,確保與 mPaaS 控制台一致。
如果手機時間資訊不正確,請修正時間配置。
從控制台下載最新
.config檔案,通過 mPaaS Extension 外掛程式重新匯入:
確認所有資訊正確後,卸載已安裝的 App,重新打包編譯後進行調試,觀察 RPC 7XXX 類錯誤是否得到解決。
RPC 3XXX 系列錯誤處理方法
RPC 3XXX 系列錯誤處理方法僅針對專有雲開發人員。公用雲端(aliyun.com)開發人員請忽略。網關開啟資料加密(進入mPaaS 控制台 > 後台服務 > 移動網關 > 網關管理 > 資料加密)後,若用戶端資料加密未配置或配置錯誤,alipay.client.getUnionResource RPC 請求可能會返回 3XXX 系列錯誤,例如:
錯誤碼 | 描述 | 解釋 |
3001 | 請求資料為空白 | 用戶端請求資料中的 |
3002 | 資料格式有誤 | RPC 請求格式有問題。專有雲使用者可以在服務端日誌 |
3003 | 資料解密失敗 | 資料解密失敗。 |
基本排查動作:
在控制台上檢查移動網關的資料加密功能是否開啟。
根據 資料加密配置文檔,檢查用戶端加密配置是否正確,包括密鑰是否匹配、格式是否正確等。
確認配置正確後,卸載已安裝的 App,重新打包編譯後進行調試,觀察 RPC 3XXX 類錯誤是否得到解決。
檢查 H5 App 資訊和發布狀態是否正確:
如 常見原因 所述,用戶端需要主動拉取離線包資訊,在 RPC 請求正常返回的前提下,如果服務端沒有返回目標離線包的資訊,也會導致載入失敗的錯誤,錯誤原因為離線包 AppNotExist 不存在。
基本檢查動作:
根據 檢查 RPC 請求是否正常 的說明,確認
alipay.client.getUnionResourceRPC 請求是否可以正常返回。在 Xcode 控制台搜尋錯誤關鍵字
AppNotExist,確認問題根因是否為找不到目標 H5 App。在 mPaaS 控制台和 iOS 工程中交叉確認如下資訊,包括:
worksapceId、appId、mpaasapi等中繼資料:控制台和meta.config中的相關配置要完全一致,如果不一致,需要重新下載.config檔案並匯入。目標離線包 ID:離線包管理頁中的離線包 ID 要和工程代碼中要開啟的離線包 ID 一致;
查看離線包發布狀態,確認離線包是否存在一個處於發布狀態的版本;
查看離線包發布狀態,確認離線包資源類型:必須為“普通資源套件”;“全域資源套件”不可直接開啟;
查看離線包發布狀態,確認該發布的離線包版本:必須 大於 用戶端已安裝的離線包版本;
查看離線包發布狀態,確認該發布覆蓋的用戶端版本範圍:必須覆蓋測試 App 的目前的版本號;
重要iOS 專案中,用戶端版本號碼依賴
info.plist中的Produc Version欄位,而不是 Xcode 專案version,這裡需要開發人員手動同步。確認上述資訊無誤後,卸載已安裝的 App,重新打包編譯後進行調試,觀察
AppNotExist類錯誤是否得到解決。
如果依然不能解決問題,請準備好相關問題的複現 Demo 工程,搜尋群號 145930007362 加入DingTalk群進行諮詢交流。