解答:在 10.1.32 基线中, 只支持 plist 格式。在 10.1.60 基线中, plist 和 json 格式都支持。
解答:参考代码 NSDictionary *installedApps = [NAMServiceGet() installApps:nil];
。
解答:可以使用封装的 requestAllNebulaApps
方法进行全量更新。
[[MPNebulaAdapterInterface shareInstance]requestAllNebulaApps:^(NSDictionary *data, NSError *error) {
}];
vux-ui pulldown
组件在H5容器中存在滑动卡死的情况。解答:这是因为触发了 UIWebview
在 iOS 系统中的 bug,可以考虑切换成 WKWebview 或更换前端组件。切换为 WKWebview 的方法请参考文档 mPaaS 10.1.60 适配 WKWebView。
解答:打开一个 H5 页面,进入 Xcode View 层级页面,在 lldb 控制台使用 po [[PSDService sharedInstance] jsApis]
查看所有 JSAPI。同理使用 po [[PSDService sharedInstance] plugins]
查看所有注册的 Plugins。
解答:在实际执行过程中,Plugin 可直接拿到参数 event.context
,JSAPI 中可获取到 context
,在上下文 PSDContext
对象中,可以取到您想要的所有信息或引用,比如当前控制器 event.currentViewController
的引用,当前 WebView 的引用context.currentViewController.psdContentView
等等。
解答:直接获取当前 VC 的 psdScene.createParam.expandParams
属性。
解答:在 JSAPI 的实际执行方法中,获取当前页面所属离线包的 appId,决定是否执行逻辑就可以了。
解答:您可以自定义 Plugin,通过监听事件来实现。
[PSDProxy addEventListener:kEvent_Proxy_Request_Start_Handler withListener:self useCapture:YES];
`
else if ([kEvent_Proxy_Request_Start_Handler isEqualToString:event.eventType]
&& [event isKindOfClass:[PSDProxyEvent class]] ){
NSLog(@"-----kNBEvent_Scene_NavigationItem_Right_Setting_Click----");
PSDProxyEvent *proxyEvent = (PSDProxyEvent*) event;
NSMutableURLRequest *redirectReq = proxyEvent.request.mutableCopy;
NSString *appId = event.context.currentSession.createParam.expandParams[@"appId"];
NAMApp *app = [NAMServiceGet() findApp:appId version:nil];
NSString *fallBackUrl = app.fallback_host;
NSString *vhost = app.vhost;;
NSString *url = redirectReq.URL.absoluteString;
NSLog(@"url__%@______fallBackUrl:%@",url,fallBackUrl);
if ([url containsString:@"www.baidu.com"]) {
[proxyEvent preventDefault];
}}
解答:您可以直接调用当前页面所属基类的 callHandler 方法,代码示例如下所示。
解答:在查看此问题解决方案前,确认您已理解 离线包更新原理,客户端不能正常加载新包,离线包渲染在任一阶段都有可能出错,下面将一一进行排查。
查看全量更新离线包的 RPC 返回结果,在控制台搜索 bizType: 4
确认返回的离线包详情,确认已经拉取了控制台发布的最新包信息。
上一步检查通过后,查看沙盒目录下离线包是否解压成功(若当前离线包有引用全局资源包中内容,此解压目录下同样需要有全局资源包)。
若上一步中沙盒目录下无对应离线包,可先暂时关闭离线包验签,删除 App 重新运行。若关闭验签后加载正常,说明离线包加签私钥和客户端验签公钥不一致,请更新客户端对应的公钥信息。
解答:页面白屏或出现 400 错误,一般为本地离线包加载失败导致走了在线 fallback 地址,而对应页面的 fallback 地址不存在,导致页面加载失败。
fallback_base_url
与从控制台下载的 h5_json.json 配置文件中 fallback_base_url
一致。fallback_base_url + main_url
拼接的地址在浏览器可正常加载。解答:支持由前端 H5 页面禁止和 原生 H5 容器基类禁止。
AlipayJSBridge.call('setGestureBack',{val:false});
原生 H5 容器基类禁止:在基类的 viewDidAppear 方法中调用系统禁止侧滑返回的接口,同时设置 guestBack参数。适用于多个或所有 H5 页面需要禁止手势侧滑返回的场景。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.options.gestureBack = NO;
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
}
解答:获取当前页面所在的 session,调用 isTinyAppWithSession
接口判断。代码示例如下:
PSDSession *session = self.psdSession;
BOOL isTinyApp = [NBUtils isTinyAppWithSession:session];
解答:根据传参方式,分为一下几种场景:
startH5ViewControllerWithParams
方法时传递 [[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithParams:@{@"url": @"https://tech.antfin.com", @"key1":@"value1"}];
。startH5ViewControllerWithNebulaApp
方法时传递 [[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithNebulaApp:@{@"appId":@"70000000",@"param":@{@"key2":@"value2"}}];
。pushWindow
时将自定义参数写在 passData
中:
AlipayJSBridge.call('pushWindow', {
// 要打开页面的 URL
url: 'https://m.taobao.com/',
// 打开页面的配置参数
param: {
readTitle: true, //自动读取 title
showOptionMenu: false, // 隐藏右边菜单
transparentTitle:'always',
},
// 用于给新开的页面传递参数,可选
// 在新开的页面使用 AlipayJSBridge.startupParams 可以获取到 passData
passData: {
key1: "key1Value",
key2: "key2Value"
}
});
AlipayJSBridge.call('startApp', {
appId: '70000000',
param: {
key1:'value1'
}
}, function(result) {
// noop
});
解答:分为前端获取和原生获取两种场景:
前端获取:通过 startupParams 方法获取。
// 当前页面的启动参数
AlipayJSBridge.startupParams
原生获取:通过当前页面所在的 VC 对象获取。
// 当前页面的启动参数
NSDictionary *expandParams = self.psdScene.createParam.expandParams;
NSLog(@"[mpaas] expandParams: %@", expandParams);
解答:您可以自定义 Plugin,通过监听事件来实现。
kEvent_Invocation_Event_Start
。
else if([kEvent_Invocation_Event_Start isEqualToString:event.eventType]) {
PSDInvocationEvent * invocationEvent = (PSDInvocationEvent *)event;
NSString * apiName = invocationEvent.invocationName;
if([apiName isEqualToString:@"setOptionMenu"] || [apiName isEqualToString:@"showOptionMenu"] ) {
NSLog(@"wwww");
}
}
在文档使用中是否遇到以下问题
更多建议
匿名提交