// // H5Container.m // NebulaDemo // // Created by Glance on 16/12/13. // Copyright © 2016年 Alipay. All rights reserved. // #import "H5Container.h" #import #import "H5WebViewController.h" #import "MPWebView.h" @interface H5Container () @property (weak, nonatomic) IBOutlet UIView *viewSubMode; @property (weak, nonatomic) IBOutlet UIView *viewFullMode; @property (weak, nonatomic) IBOutlet UITextView *txvURL; @property (weak, nonatomic) IBOutlet UIViewController *viewController; @property (weak, nonatomic) UIViewController *h5ViewController; @end @implementation H5Container { BOOL _isSubViewMode; } -(IBAction)btnOpenURLClicked:(UIButton *)button { [self.viewController.view endEditing:YES]; NSString *urlStr = self.txvURL.text; BOOL isFullMode = !_isSubViewMode; NSMutableDictionary *mCreateParams = [NSMutableDictionary dictionary]; [mCreateParams setValue:urlStr forKey:@"url"]; if (isFullMode) { // MARK: - 创建容器,创建后的ViewController将由NEBULA持有并负责销毁时机 /* 方式1 UIViewController *vc = (UIViewController *)[NBServiceGet() createNBViewController:mCreateParams]; vc.view.backgroundColor = [UIColor whiteColor]; [self.viewController.navigationController pushViewController:vc animated:YES]; */ // 方式2 [NBServiceGet() startSession:@{@"appId":@"2000999", @"url":urlStr?:@"", @"readTitle":@YES, @"showProgress":@YES, @"backgroundColor":@16775138, @"showTitleLoading": @YES} animated:YES]; // 更多启动参数参考 NebulaSDK / NBOptions.h } else { UIViewController *vc = [UIViewController new]; vc.title = @"嵌入式页面使用容器"; vc.view.backgroundColor = [UIColor blackColor]; // - 创建容器,创建后的ViewController将由NEBULA持有并负责销毁时机 UIViewController *vc2 = (UIViewController *)[NBServiceGet() createNBViewController:mCreateParams]; vc2.view.backgroundColor = [UIColor whiteColor]; // MARK: - 将创建后的ViewController的view添入到自有ViewController,作为嵌入区块 UIView *fragmentView = vc2.view; [vc.view addSubview:fragmentView]; fragmentView.translatesAutoresizingMaskIntoConstraints = NO; [vc.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[fragmentView]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(fragmentView)]]; [vc.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-80-[fragmentView]-80-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(fragmentView)]]; [self.viewController.navigationController pushViewController:vc animated:YES]; } } + (void)configNebulaSDK { // 控件创建 [NBServiceConfigurationGet() setViewControllerClass:[H5WebViewController class]]; [NBServiceConfigurationGet() setContentViewClass:[MPWebView class]]; // 自定义的插件配置,所有自定义的jsapi和plugin都保存在DemoPresetApps.bundle/Poseidon-Extra-Config.plist中 NSString *filePath = [[NSBundle mainBundle].bundlePath stringByAppendingFormat:@"/%@/%@", @"DemoPlugins.bundle", @"Poseidon-Extra-Config.plist"]; [NBServiceConfigurationGet() setExtraPluginsFilePath:filePath]; // 预置包配置,所有预置的离线包在DemoPresetApps.bundle中,预置的包信息在 DemoPresetApps.bundle/NAMApplist.plist 中 [NBServiceConfigurationGet().appConfig setPresetApplistPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"DemoPresetApps.bundle/NAMApplist.plist"] ofType:nil]]; [NBServiceConfigurationGet().appConfig setPresetAppPackagePath:[[NSBundle mainBundle] pathForResource:@"DemoPresetApps.bundle" ofType:nil]]; // 包管理服务器配置 NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"Product Version"]; [NBServiceConfigurationGet() setClientVersion:version]; NSString *bundleId = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"]; [NBServiceConfigurationGet() setClientBundleId:bundleId]; [NBServiceConfigurationGet() setUserAgent:[NSString stringWithFormat:@"H5Demo %@", version]];//指定userAgent // 离线包管理设置(验签公钥、公共资源包、离线包下载器) NSString *pubpem = [[NSBundle mainBundle] pathForResource:@"public_key" ofType:@"pem"]; [NBServiceConfigurationGet().appConfig setSignPublicKey: [NSString stringWithContentsOfFile:pubpem encoding:NSUTF8StringEncoding error:nil]];// 设置离线包验签公钥 [NBServiceConfigurationGet() setIsNeed2VerifyApp:NO];//关闭验签,上述设置公钥不生效 [NBServiceConfigurationGet() setCommonResourceAppList:@[@"7777777"]]; //指定应用的全局资源包 [NBServiceConfigurationGet().appConfig setRequestManager:[NARequestManager sharedInctance]]; // 设置离线包下载器 // [NBServiceConfigurationGet().appConfig setDynamicConfigManager:[CGBNebulaLoggingHelper sharedInstance]]; // H5埋点监控委托 // NBLogConfigurationGet().shouldInjectSPMJS=YES; // NBLogConfigurationGet().configServiceDelegate = [CGBNebulaLoggingHelper sharedInstance]; // [NBLogServiceGet() start]; // [[NBMonitor defaultMonitor] setDelegate:NBLogServiceGet()]; NAMServiceGet(); [NBServiceGet() start]; } #pragma mark - UI相关代码,不需关心 - (IBAction)viewh5ModeClicked:(UIView *)sender { [self.viewController.view endEditing:YES]; _isSubViewMode = sender.tag == 0; NSArray *views = @[self.viewSubMode, self.viewFullMode]; for (UIView *view in views) { view.backgroundColor = [UIColor colorWithWhite:0.92 alpha:1]; view.layer.borderWidth = 0; UILabel *label = (UILabel *)[view viewWithTag:11]; label.textColor = [UIColor colorWithWhite:0x99/255.0 alpha:1]; } sender.backgroundColor = [UIColor whiteColor]; sender.layer.borderWidth = 1; UILabel *label = (UILabel *)[sender viewWithTag:11]; label.textColor = [UIColor colorWithWhite:0x33/255.0 alpha:1]; } - (IBAction)btnClearClicked:(id)sender { self.txvURL.text = @""; } - (IBAction)btnCustomNavigationItemClicked:(id)sender { [DemoConfigServer sharedInstance].useCustomNavigationItemView = YES; NSMutableDictionary *mCreateParams = [NSMutableDictionary dictionary]; [mCreateParams setValue:@"https://www.baidu.com" forKey:@"url"]; UIViewController *vc = (UIViewController *)[NBServiceGet() createNBViewController:mCreateParams]; vc.view.backgroundColor = [UIColor whiteColor]; [self.viewController.navigationController pushViewController:vc animated:YES]; } - (IBAction)btnNative2H5:(id)sender { NSMutableDictionary *mCreateParams = [NSMutableDictionary dictionary]; NSString *path = [[NSBundle mainBundle]pathForResource:@"Native2H5" ofType:@".html"]; [mCreateParams setValue:path forKey:@"url"]; UIViewController *vc = (UIViewController *)[NBServiceGet() createNBViewController:mCreateParams]; self.h5ViewController = vc; vc.view.backgroundColor = [UIColor whiteColor]; UIButton *btn = [[UIButton alloc]init]; [btn setTitle:@"自定义消息通信" forState:UIControlStateNormal]; btn.backgroundColor = [UIColor colorWithRed:0x33/255.0 green:0x99/255.0 blue:0 alpha:1]; [btn addTarget:self action:@selector(sendDomEvent:) forControlEvents:UIControlEventTouchUpInside]; [vc.view addSubview:btn]; btn.translatesAutoresizingMaskIntoConstraints = NO; [vc.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[btn]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(btn)]]; [vc.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[btn]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(btn)]]; [vc.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[btn(==40)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(btn)]]; [self.viewController.navigationController pushViewController:vc animated:YES]; } - (IBAction)btnH52Native:(id)sender { NSMutableDictionary *mCreateParams = [NSMutableDictionary dictionary]; NSString *path = [[NSBundle mainBundle]pathForResource:@"H52Native" ofType:@".html"]; [mCreateParams setValue:path forKey:@"url"]; UIViewController *vc = (UIViewController *)[NBServiceGet() createNBViewController:mCreateParams]; vc.view.backgroundColor = [UIColor whiteColor]; [self.viewController.navigationController pushViewController:vc animated:YES]; } - (void)sendDomEvent:(UIButton *)btn { [self.h5ViewController callHandler:@"h5_domEvent_test" data:@{@"message":@"收到从Native发来的消息"} responseCallback:^(NSDictionary *responseData){ if (![responseData[@"h5_domEvent_testEventCanceled"] boolValue]) { NSLog(@"%@", responseData); } }]; } - (IBAction)btnMonitorClicked:(id)sender { // [[H5Monitor sharedInstance].showBtn sendActionsForControlEvents:UIControlEventTouchUpInside]; } @end