本文介绍接入 iOS 过程中常见的问题及相应的解决方案。
前端在开发离线包时,对应路径及文件名中不允许有中文字符,否则会导致客户端离线包解压失败。
离线包中各资源路径的绝对长度不要超过 100 字符,否则导致客户端 tar 包解压失败,页面白屏。
解答:在使用 mPaaS 容器的过程中可能会遇到 H5 容器定位偏移的问题,请参考以下方法进行设置更新:
解答:在 10.1.32 基线中,只支持 plist 格式。在 10.1.60 基线中,plist 和 JSON 格式都支持。
解答:参考代码 NSDictionary *installedApps = [NAMServiceGet() installApps:nil];。
解答:可以使用封装的 requestAllNebulaApps 方法进行全量更新。
在 H5 页面基类获取当前页面的 WebView 时,请在 viewWillAppear 方法中。viewDidLoad 方法中 WebView 未创建,如果使用该方法,取到的值会为 nil。
解答:您可以自定义 Plugin,通过监听事件来实现。
监听事件名称 [PSDProxy addEventListener:kEvent_Proxy_Request_Start_Handler withListener:self useCapture:YES];。
拦截处理。
解答:在 H5 页面的基类中,实现 UIWebView 的生命周期的代理方法中,监听 kEvent_Navigation_Start 事件,在页面加载之前拦截,获取当前页面的 WebView 和 URL 进行相关处理。
解答:有时 Native 端可能需要您在当前页面手动调用某个 JSAPI 接口,可通过调用当前 VC 的以下接口实现。
解答:预置资源包加载失败一般为预置包版本和包信息不匹配,测试本地预置离线包时,请先断开网络,避免离线包有更新,确保加载的是客户端本地预置的版本。
查看全量更新离线包的 RPC 返回结果,在控制台搜索“bizType: 4”确认返回的离线包详情,确认已经拉取了控制台发布的最新包信息。
上一步检查通过后,在加载离线包的 finish 回调方法里查看离线包信息,确保为控制台发布的最新包,且 error 的值为 nil,检查离线包的 app_id、version、main_url 等是否正确。
解答:当通过 Safari 调试判断出全局资源包加载失败时,可按下述步骤具体排查:
检查全局资源包是否注册。
检查引用的全局资源包中资源文件路径是否正常,且保证引用路径中无中文字符。
解答:页面白屏或出现 400 错误,一般为本地离线包加载失败导致使用了在线 fallback 地址,而对应页面的 fallback 地址不存在,导致页面加载失败。
按上述离线包问题排查客户端离线包加载失败的原因。
预置离线包若出现在线 fallback 地址失败的问题,先保证预置的离线包在控制台同样也上传。
并且 fallback_base_url + main_url 拼接的地址在浏览器上可正常加载。
解答:支持由前端 H5 页面禁止和原生 H5 容器基类禁止。
原生 H5 容器基类禁止:在基类的 viewDidAppear 方法中调用系统禁止侧滑返回的接口,同时设置 guestBack 参数。适用于多个或所有 H5 页面需要禁止手势侧滑返回的场景。
解答:获取当前页面所在的 session,调用 isTinyAppWithSession 接口判断。代码示例如下:
解答:根据传参方式,分为以下几种场景:
原生 - 离线包:调用 startH5ViewControllerWithNebulaApp 方法时传递 [[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithNebulaApp:@{@"appId":@"70000000",@"param":@{@"key2":@"value2"}}];。
H5 - H5:调用 pushWindow 时将自定义参数写在 passData 中。
H5 - 离线包:调用 startApp JSAPI 时将自定义参数写在 param 中。
解答:分为前端获取和原生获取两种场景:
前端获取:通过 startupParams 方法获取当前页面的启动参数。
原生获取:通过当前页面所在的 VC 对象获取。
解答:可以自定义 Plugin,通过监听事件来实现。
监听事件名称:kEvent_Invocation_Event_Start。
拦截处理:获取到 JSAPI 的名称、传递的参数等。
关注阿里云公众号或下载阿里云APP,关注云资讯,随时随地运维管控云服务