阿里云首页 移动开发平台 mPaaS

H5 应用及小程序加载失败:“系统繁忙,请稍后再试”

问题描述

开发者在完成基本接入后,尝试打开 H5 应用,但容器页面显示错误提示“系统繁忙,请稍后再试”,如下图:
9

常见原因

mPaaS 框架在打开一个 H5 应用前,首先需要获知该应用离线包的基本信息,因此客户端会主动通过 RPC 接口 alipay.client.getUnionResource 去拉取离线包信息。如果离线包信息获取失败,或没有命中要打开的目标应用,容器会提示错误 “系统繁忙,请稍后再试”。
针对这类问题,排查方向包括:检查 RPC 请求是否正常、检查环境和离线包发布是否匹配等。

问题排查步骤

检查 RPC 请求是否正常

常见原因 所述,客户端需要主动拉取离线包信息,而拉取过程依赖 RPC 请求,如果 RPC 链路存在问题,则无法正常获取离线包信息,导致加载失败。要确认 RPC 请求是否存在问题,需要在 Xcode 控制台中搜索 alipay.client.getUnionResource 观察 RPC 请求是否正常返回。如果存在错误,一般的错误代码包括 7XXX 或 3XXX 系列等,例如:

  • 正常返回样例(result-status1000):

    1. Demo[83767:2555863] [mPaaSLog] APMobileNetwork alipay.client.getUnionResource resp:{
    2. "Content-Encoding" = gzip;
    3. "Content-Type" = "text/plain;charset=UTF-8";
    4. Date = "Tue, 11 Aug 2020 05:01:37 GMT";
    5. Vary = "Accept-Encoding";
    6. "mgw-traceid" = 0a1cfd401597122097726853822435;
    7. "result-status" = 1000;
    8. "server-time" = 1597122097739;
    9. }
  • 错误返回样例(result-status 不为 1000):

    1. Demo[83383:2546279] [mPaaSLog] APMobileNetwork alipay.client.getUnionResource resp:{
    2. "Content-Length" = 0;
    3. "Content-Type" = "text/plain;charset=UTF-8";
    4. Date = "Tue, 11 Aug 2020 04:50:08 GMT";
    5. 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";
    6. "mgw-traceid" = 0a1d7667159712140890222728553;
    7. "result-status" = 7014;
    8. "server-time" = 1597121408902;
    9. 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";
    10. }

RPC 7XXX 系列错误的处理方法

参考文档 网关结果码说明,7XXX 类错误均与 RPC 请求的签名验证过程有关,常见错误代码及原因如下:

7000 没有设置公钥 移动 APP 中无线保镖中无 appId 对应的密钥或者网关无法获取 appId 对应的签名密钥。
7001 验签的参数不够 网关服务端验证签名不通过。
7002 验签失败 网关服务端验证签名不通过。
7003 验签-时效性失败 API 请求入参 ts 时间戳超过系统设置的时间有效性。需要检查客户端时间是否为系统时间。
7007 验签-缺少 ts 参数 API 请求缺少验签 ts 参数。
7014 验签-缺少 sign 参数 API 请求缺少验签 sign 参数。一般情况下是客户端签名数据失败,导致缺失 sign 参数。请检查客户端无线保镖图片是否正确。
  • 基本排查动作如下:
  1. 检查 mPaaS 控制台设置的 Bundle ID 与 iOS 工程是否完全一致,包括:
    1. mPaaS 控制台(控制台 > 代码配置 > iOS)上设置的 Bundle ID
      10
    2. 工程的 Bundle ``Indentifier
      11
    3. 工程中 Info.plistBundle Indentifier:
      12
  2. 检查控制台下载的 .config 文件内容与项目中的 meta.config 是否完全一致:
    1. mPaaS 控制台下载的 .config 文件:
      13
    2. 工程中的 meta.config 文件:
      14
  3. 客户端设备的时间是否为当前时间,时间误差必须小于 8 小时。
  4. 专有云开发者需要注意,无线保镖图片需要手动生成并放到工程中。公有云(aliyun.com)开发者请忽略。
    15
  5. 如果上述检查存在信息不一致,则检查不通过,建议:
    1. 修改工程中的信息,确保与 mPaaS 控制台一致。
    2. 如果手机时间信息不正确,请修正时间配置。
    3. 从控制台下载最新 .config文件,通过 mPaaS Extension 插件重新导入:
      16
    4. 确认所有信息正确后,卸载已安装的 App,重新打包编译后进行调试,观察 RPC 7XXX 类错误是否得到解决。

RPC 3XXX 系列错误处理方法

RPC 3XXX 系列错误处理方法仅针对专有云开发者。公有云(aliyun.com)开发者请忽略。
网关开启数据加密(控制台 > 后台服务管理 > 移动网关 > 网关管理 Tab 页 > 数据加密)后,若客户端数据加密未配置或配置错误,alipay.client.getUnionResource RPC 请求可能会返回 3XXX 系列错误,例如:

3001 请求数据为空 客户端请求数据中的 requestData 为空。请检查客户端 RPC 是否正常,iOS 端需确认已初始化网关服务 。
3002 数据格式有误 RPC 请求格式有问题。专有云用户可以在服务端日志 gateway-error.log 中查看详细信息。
3003 数据解密失败 数据解密失败。

基本排查动作

  1. 在控制台上检查移动网关的数据加密功能是否开启。
  2. 根据 数据加密配置文档,检查客户端加密配置是否正确,包括密钥是否匹配、格式是否正确等。
  3. 确认配置正确后,卸载已安装的 App,重新打包编译后进行调试,观察 RPC 3XXX 类错误是否得到解决。

检查 H5 App 信息和发布状态是否正确:

常见原因 所述,客户端需要主动拉取离线包信息,在 RPC 请求正常返回的前提下,如果服务端没有返回目标离线包的信息,也会导致加载失败的错误,错误原因为离线包 AppNotExist 不存在。

基本检查动作:

  1. 根据 检查 RPC 请求是否正常 的说明,确认 alipay.client.getUnionResource RPC 请求是否可以正常返回。
  2. 在 Xcode 控制台搜索错误关键字 AppNotExist,确认问题根因是否为找不到目标 H5 App,例如:
    17
  3. 在 mPaaS 控制台和 iOS 工程中交叉确认如下信息,包括:
    1. worksapceIdappIdmpaasapi 等元数据:控制台和 meta.config 中的相关配置要完全一致,如果不一致,需要重新下载 .config 文件并导入。
    2. 目标离线包 ID:离线包管理页中的离线包 ID 要和工程代码中要打开的离线包 ID 一致;
    3. 查看离线包发布状态,确认离线包是否存在一个处于发布状态的版本:
      18
    4. 查看离线包发布状态,确认离线包资源类型:必须为“普通资源包”;“全局资源包”不可直接打开;
    5. 查看离线包发布状态,确认该发布的离线包版本:必须 大于 客户端已安装的离线包版本;
    6. 查看离线包发布状态,确认该发布覆盖的客户端版本范围:必须覆盖测试 App 的当前版本号;注意:iOS 项目中,客户端版本号依赖 info.plist 中的 Produc Version 字段,而不是 Xcode 项目 version,这里需要开发者手动同步。
      19
      20
    7. 确认上述信息无误后,卸载已安装的 App,重新打包编译后进行调试,观察 AppNotExist 类错误是否得到解决。

工单协助

如果依然不能解决问题,请准备好相关问题的复现 Demo 工程,通过阿里云工单系统联系 mPaaS 售后技术支持。

首页 移动开发平台 mPaaS 移动开发平台问题排查指南 H5 容器与离线包 H5 应用及小程序加载失败:“系统繁忙,请稍后再试”