全部产品

使用 H5 容器

更新时间:2020-09-18 16:56:49

初始化容器

为了使用 Nebula 容器,您需要在程序启动完成后进行初始化。

MyH5Application/MPaaS/Targets/MyH5Application/APMobileFramework/DTFrameworkInterface+MyH5Application.m 中,DTFrameworkInterfaceCategorybeforeDidFinishLaunchingWithOptions 方法中,调用以下接口进行初始化。

示例如下:

  1. - (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  2. {
  3. // 初始化容器
  4. [MPNebulaAdapterInterface initNebula];
  5. }

在应用内打开一个在线网页

在客户端代码中添加完容器初始化逻辑后,就可以调用 Nebula 容器提供的接口,启动一个在线网页。

点击 视频教程,查看对应的视频教程。

  1. MyH5Application/Sources/DemoViewController.m 中添加代码。
    添加一个按钮,点击按钮调用接口打开在线网页。

    1. #import "DemoViewController.h"
    2. @interface DemoViewController ()
    3. @end
    4. @implementation DemoViewController
    5. - (void)viewDidLoad {
    6. [super viewDidLoad];
    7. // Do any additional setup after loading the view, typically from a nib.
    8. UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    9. button.frame = CGRectMake(30, 150, [UIScreen mainScreen].bounds.size.width-60, 44);
    10. button.backgroundColor = [UIColor blueColor];
    11. [button setTitle:@"在线 URL" forState:UIControlStateNormal];
    12. [button addTarget:self action:@selector(openOnline) forControlEvents:UIControlEventTouchUpInside];
    13. [self.view addSubview:button];
    14. }
    15. - (void)openOnline
    16. {
    17. [[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithParams:@{@"url":@"https://tech.antfin.com"}];
    18. }
    19. @end
  2. 点击按钮后即可在应用内打开金融科技官网首页。至此,您已完成 在应用内打开一个在线网页

前端调用 Native 接口

在开发前端页面时,可以通过 Nebula 容器提供的 bridge,通过 JSAPI 的方式 与 Native 进行通信,获取 Native 处理的相关信息或数据。Nebula 容器内预置了部分基础的 JSAPI 能力(详情参见 链接),您可以在 H5 页面的 js 文件中,直接通过 AlipayJSBridge.call 的方式进行调用。示例如下:

  1. AlipayJSBridge.call('alert', {
  2. title: '原生 Alert Dialog',
  3. message: '这是一个来自原生的 Alert Dialog',
  4. button: '确定'
  5. }, function (e) {
  6. alert("点击了按钮");
  7. });
说明https://mcube-prod.oss-cn-hangzhou.aliyuncs.com/570DA89281533-default/80000000/1.0.0.1_all/nebula/fallback/h5_to_native.html 是已经写好的前端页面,您可以调用此页面以体验前端调用 Native 接口的功能。

点击 视频教程,查看对应的视频教程。

  1. MyH5Application/Sources/DemoViewController.m 中添加代码。
    添加一个按钮 button1。

    1. UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];
    2. button1.frame = CGRectOffset(button.frame, 0, 80);
    3. button1.backgroundColor = [UIColor blueColor];
    4. [button1 setTitle:@"前端调用 native" forState:UIControlStateNormal];
    5. [button1 addTarget:self action:@selector(openJsApi) forControlEvents:UIControlEventTouchUpInside];
    6. [self.view addSubview:button1];
  2. MyH5Application/Sources/DemoViewController.m 中,给 button1 添加实现代码。如下所示:

    1. - (void)openJsApi
    2. {
    3. [[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithParams:@{@"url":@"https://mcube-prod.oss-cn-hangzhou.aliyuncs.com/570DA89281533-default/80000000/1.0.0.1_all/nebula/fallback/h5_to_native.html"}];
    4. }
  3. 编译工程后,在手机上安装应用。打开应用后界面如下所示。
  4. 点击按钮后即可打开前端页面,点击按钮 显示原生Alert Dialog,会弹出原生的警示框,警示框的标题是 原生 Alert Dialog,消息框的内容是 这是一个来自原生的 Alert Dialog ;点击警示框的 确定 按钮,会再弹出一个无标题警示框,内容是 点击了按钮 。说明接口调用成功。至此,您已完成 前端调用 Native 接口

前端调用自定义 JSAPI

除了 Nebula 容器预置的基础 JSAPI 能力外,还可以根据以下方式自定义一个 JSAPI。

点击 视频教程,查看对应的视频教程。

  1. 创建 JSAPI 类。

    1. 第一步,操作如下图所示。
      创建 JSAPI 类 step01
    2. 第二步,操作如下图所示。
      创建 JSAPI 类 step02
    3. 第三步,操作如下图所示。
      创建 JSAPI 类 step03
    4. 第四步,添加代码。

      1. @implementation MyJsApiHandler4Myapi
      2. - (void)handler:(NSDictionary *)data context:(PSDContext *)context callback:(PSDJsApiResponseCallbackBlock)callback
      3. {
      4. [super handler:data context:context callback:callback];
      5. NSString *userId = @"admin";
      6. if ([userId length] > 0) {
      7. callback(@{@"success":@YES, @"userId":userId});
      8. } else {
      9. callback(@{@"success":@NO});
      10. }
      11. }
      12. @end
  2. 向 Nebula 容器注入您自定义的 JSAPI。
    1. MyH5Application/MyH5Application/Resources 下新建一个 bundle。
      Nebula 容器注入您自定义的 JSAPI step01
    2. 按下图所示进行操作。
      Nebula 容器注入您自定义的 JSAPI step02
    3. 将 bundle 重命名为 CustomJsApi.bundle,并将其内容清空。
    4. MyH5Application/MyH5Application/Resources 中新建一个 plist 文件,重命名为 Poseidon-UserDefine-Extra-Config.plist。在 JsApis 数组注册上一步中创建的 JSAPI 类。注册的 JSAPI 是一个字典 Dictionary 类型,其中 JSAPI 表示在 H5 页面中调用的 JSAPI 接口名 myapiname 表示上一步创建的类名 MyJsApiHandler4Myapi。将 plist 文件拖拽到CustomJsApi.bundle 中。
      Nebula 容器注入您自定义的 JSAPI step04
      Nebula 容器注入您自定义的 JSAPI step04
  3. 向容器注册自定义 JSAPI 的路径。在 MyH5Application/MPaaS/Targets/MyH5Application/APMobileFramework/DTFrameworkInterface+MyH5Application.m 中,使用下面的接口,初始化容器。在采用自定义 JSAPI 的时候,需要采用以下方法,通过 plist 将自定义的类注入容器,将自定义的路径 NSS string 传给初始化方法。

    1. - (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    2. {
    3. // [MPNebulaAdapterInterface initNebula];
    4. NSString *pluginsJsapisPath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"CustomJsApi.bundle/Poseidon-UserDefine-Extra-Config.plist"] ofType:nil];
    5. [MPNebulaAdapterInterface initNebulaWithCustomPresetApplistPath:@"" customPresetAppPackagePath:@""customPluginsJsapisPath:pluginsJsapisPath];
    6. }
  4. MyH5Application/Sources/DemoViewController.m 中添加代码,新增按钮 button2。

    1. UIButton *button2 = [UIButton buttonWithType:UIButtonTypeCustom];
    2. button2.frame = CGRectOffset(button1.frame, 0, 80);
    3. button2.backgroundColor = [UIColor blueColor];
    4. [button2 setTitle:@"前端调用自定义 JSAPI" forState:UIControlStateNormal];
    5. [button2 addTarget:self action:@selector(openCusJsApi) forControlEvents:UIControlEventTouchUpInside];
    6. [self.view addSubview:button2];
  5. MyH5Application/Sources/DemoViewController.m 中添加代码, 定义 openCusJsApi。实现代码如下所示:

    1. - (void)openCusJsApi
    2. {
    3. [[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithParams:@{@"url":@"https://mcube-prod.oss-cn-hangzhou.aliyuncs.com/570DA89281533-default/80000001/1.0.0.1_all/nebula/fallback/custom_jsapi.html"}];
    4. }
    说明https://mcube-prod.oss-cn-hangzhou.aliyuncs.com/570DA89281533-default/80000001/1.0.0.1_all/nebula/fallback/custom_jsapi.html 是已经写好的前端页面,您可以调用此页面以体验前端调用自定义JSAPI接口的功能。在该前端页面中,通过以下方法调用该自定义JSAPI。示例如下所示。
    1. AlipayJSBridge.call('myapi', {
    2. param1: 'JsParam1',
    3. param2: 'JsParam2'
    4. }, function (result) {
    5. alert(JSON.stringify(result));
    6. });
  6. 编译工程后,在手机上安装应用。打开应用后界面如下所示。
  7. 点击 前端调用自定义 JSAPI 按钮后即可打开前端页面,再点击按钮 自定义JSAPI,会打开包含了一个按钮 自定义JSAPI 的前端页面。点击该 自定义JSAPI 按钮,会再弹出一个无标题警示框,内容按照自定义 API 定义的功能处理了的前端调用时传入的参数。至此,您已完成 前端调用 自定义JSAPI 接口

自定义H5 页面的 TitleBar

H5 页面导航栏样式为白底黑字蓝按钮,您可以通过自定义一个 Plugin,来修改导航栏样式。

点击 视频教程,查看对应的视频教程。

  1. 创建 Plugin 类。

    1. 按下图所示进行操作。
      01
    2. 按下图所示进行操作。
      01
    3. 按下图所示进行操作。
      03
    4. 添加代码。

      1. - (void)pluginDidLoad
      2. {
      3. self.scope = kPSDScope_Scene;
      4. // -- 返回区域
      5. [self.target addEventListener:kNBEvent_Scene_NavigationItem_Left_Back_Create_Before withListener:self useCapture:NO];
      6. [super pluginDidLoad];
      7. }
      8. - (void)handleEvent:(PSDEvent *)event
      9. {
      10. [super handleEvent:event];
      11. if ([kNBEvent_Scene_NavigationItem_Left_Back_Create_Before isEqualToString:event.eventType]) {
      12. // 在默认返回按钮基础上,修改样式
      13. NSArray *leftBarButtonItems = event.context.currentViewController.navigationItem.leftBarButtonItems;
      14. if ([leftBarButtonItems count] == 1) {
      15. if (leftBarButtonItems[0] && [leftBarButtonItems[0] isKindOfClass:[AUBarButtonItem class]]) {
      16. // 在默认返回按钮基础上,修改返回箭头和文案颜色
      17. AUBarButtonItem *backItem = leftBarButtonItems[0];
      18. backItem.backButtonColor = [UIColor redColor];
      19. backItem.titleColor = [UIColor redColor];
      20. }
      21. }
      22. [event preventDefault];
      23. [event stopPropagation];
      24. }
      25. }
      26. - (int)priority
      27. {
      28. return PSDPluginPriority_High;
      29. }
  2. 向 Nebula 容器注入您自定义的 JSAPI。
    打开 Poseidon-UserDefine-Extra-Config.plist 文件,在 Plugins 数组注册上一步中创建的 MPJsApiHandler4TitleView 类。注册的 Plugins 是一个字典 Dictionary 类型,其中 name 表示上一步创建的类名 MyJsApiHandler4TitleViewScope 表示处理范围是页面(scene)。
    !01
  3. 向容器注册自定义 plugin 的路径。在 MyH5Application/MPaaS/Targets/MyH5Application/APMobileFramework/DTFrameworkInterface+MyH5Application.m 中,使用下面的接口,初始化容器。在采用自定义 JSAPI 的时候,需要采用以下方法,通过 plist 将自定义的 plugin 类注入容器。

    说明:在上一步调用自定义 JSAPI 时已完成注册,可跳过本步骤。
    1. - (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    2. {
    3. // [MPNebulaAdapterInterface initNebula];
    4. NSString *pluginsJsapisPath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"CustomJsApi.bundle/Poseidon-UserDefine-Extra-Config.plist"] ofType:nil];
    5. [MPNebulaAdapterInterface initNebulaWithCustomPresetApplistPath:@"" customPresetAppPackagePath:@""customPluginsJsapisPath:pluginsJsapisPath];
    6. }
  4. MyH5Application/Sources/DemoViewController.m 中添加代码,新增按钮 button3。

    1. UIButton *button3 = [UIButton buttonWithType:UIButtonTypeCustom];
    2. button3.frame = CGRectOffset(button2.frame, 0, 80);
    3. button3.backgroundColor = [UIColor blueColor];
    4. [button3 setTitle:@"自定义导航栏" forState:UIControlStateNormal];
    5. [button3 addTarget:self action:@selector(customNavigatorBar) forControlEvents:UIControlEventTouchUpInside];
    6. [self.view addSubview:button3];
  5. MyH5Application/Sources/DemoViewController.m 中添加代码, 定义 customNavigatorBar。实现代码如下所示。

    1. - (void)customNavigatorBar
    2. {
    3. [[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithParams:@{@"url":@"https://tech.antfin.com"}];
    4. }
  6. 编译工程后,在手机上安装应用。打开应用后界面如下所示。
  7. 点击 自定义导航 按钮后即可打开金融科技官网,此时返回按钮已经根据自定义调整样式。至此,您已完成 自定义导航