关于H5容器和离线包,使用mPaaS框架集成的时候,参照文档使用如下配置
// 初始化容器
[MPNebulaAdapterInterface initNebula];
[MPNebulaAdapterInterface shareInstance].nebulaVeiwControllerClass = NSClassFromString(@"H5WebViewController");
[MPNebulaAdapterInterface shareInstance].nebulaNeedVerify = NO;
[MPNebulaAdapterInterface shareInstance].nebulaUserAgent = @"AlipayClient/Portal";
[MPNebulaAdapterInterface shareInstance].nebulaCommonResourceAppList = @[@"77777777"];
离线包存放位置:
MPCustomPresetApps.bundle
当使用CocoaPods集成时,上面代码就不行了,首先,离线包的存放需要自定义bundle放在工程目录下面,
自定义bundle名称
在afterDidFinishLaunchingWithOptions
中添加H5容器的配置代码(didFinishLaunchingWithOptions
应该也可以)
// 控件创建:指定H5页面的基类和 webView 的基类
[NBServiceConfigurationGet() setViewControllerClass:[H5WebViewController class]];
// 小程序包中H5页面的基类必须是H5WebViewController 的子类
[NBServiceConfigurationGet() setContentViewClass:[UIWebView class]];
// 包管理服务器配置(没有包管理服务器时不要设置如下项)
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"Product Version"];
[NBServiceConfigurationGet() setClientVersion:version]; // 指定当前应用的版本号,mPaaS框架中,请保持工程 Build Version 与 Product Version 一致
NSString *bundleId = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"];
// 指定当前应用的 bundle ID
[NBServiceConfigurationGet() setClientBundleId:bundleId];
//指定userAgent
[NBServiceConfigurationGet() setUserAgent:[NSString stringWithFormat:@"AlipayClient/MPaaSDemo/%@", version]];
NBServiceConfigurationGet().appConfig.dataRootPath = [NSString stringWithFormat:@"%@/%@",NBServiceConfigurationGet().appConfig.documentDirectoryPath, @"NAMAPP"];
// 预置包配置(可以脱离包管理服务器)
[NBServiceConfigurationGet().appConfig setPresetApplistPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"H5AppPresets.bundle/NAMApplist.plist"] ofType:nil]]; // 指定预置离线包的包信息文件路径
[NBServiceConfigurationGet().appConfig setPresetAppPackagePath:[[NSBundle mainBundle] pathForResource:@"H5AppPresets.bundle" ofType:nil]]; // 指定预置离线包的包路径
// 离线包管理设置(验签公钥、公共资源包、离线包下载器)
[NBServiceConfigurationGet() setCommonResourceAppList:@[@"66666692"]]; // 设置小程序依赖的公共资源包:66666692(必填);如有普通离线包依赖的公共资源包如77777777,也需设置(可选)
// NSString *pubpem = [[NSBundle mainBundle] pathForResource:@"public_key" ofType:@"pem"];
// [NBServiceConfigurationGet().appConfig setSignPublicKey: [NSString stringWithContentsOfFile:pubpem encoding:NSUTF8StringEncoding error:nil]]; // 指定离线包验签的公钥
// 关闭验签
[NBServiceConfigurationGet() setIsNeed2VerifyApp:NO];
//指定离线包的下载器 ---不清楚有什么用
// [NBServiceConfigurationGet().appConfig setRequestManager:[NARequestManager sharedInctance]];
// 监控委托,添加H5页面的自动化埋点
NBLogConfigurationGet().shouldInjectSPMJS=YES;
[NBLogServiceGet() start];
[[NBMonitor defaultMonitor] setDelegate:NBLogServiceGet()];
// 最后 启动服务
[NBServiceGet() start];
值得注意的是:
当使用[NBServiceGet() start];
初始化服务的时候,无需再使用[MPNebulaAdapterInterface initNebula];
进行初始化! 尤其是先[NBServiceGet() start];
后[MPNebulaAdapterInterface initNebula];
,大概是执行顺序的问题,会使前面设置的属性被更新掉,导致找不到app的问题。
网友评论