BoneMobile容器SDK为可选模块,提供加载插件的功能。如果您需要开发或者使用插件,则需要在App中集成BoneMobile容器SDK。

依赖 SDK 概述
日志 基础依赖SDK,提供客户端统一日志打印,日志等级控制,分模块日志隔离等能力
API通道 提供IoT业务协议封装的API网关HTTPS请求能力,和集成无线保镖SDK进行请求报文安全加签的能力
MJRefresh github上开源的下拉刷新控件,版本:3.1.15
ZipArchive github上开源的 zip 解压库,版本:1.4.0
说明 Google Play已于2019年8月1日停掉尚未支持64位体系的App,如果您App要在海外Google Play应用商店上架,且用到了BoneKit SDK,那需要尽快升级,以免无法上架。后续如果推出新插件或老插件升级,仅针对已升级到v0.59 BoneKit SDK的自有App。

初始化

在API通道初始化成功后,再参考下面的示例代码初始化BoneMobile容器SDK。

#import <IMSBoneKit/IMSBoneConfiguration.h>

IMSBoneConfiguration *configuration = [IMSBoneConfiguration sharedInstance];
configuration.pluginEnvironment = IMSBonePluginEnvironmentRelease;

在发布资源变更以前,可以把pluginEnvironment切换到开发环境来测试插件变更的效果。测试通过后,单击发布按钮,插件的变更才会发布到生产环境。

国际化支持

  • 设置语言

    目前支持中文(zh-CN)、英文(en-US)、法文(fr-FR)、德文(de-DE)、日文(ja-JP)、韩文(ko-KR)、西班牙文(es-ES)、俄文(ru-RU)、印地语(hi-IN)、意大利语(it-IT)等十种语言。

    //目前支持中文“zh-CN”, 英文"en-US",法文"fr-FR",德文"de-DE",日文"ja-JP",韩文"ko-KR",西班牙文"es-ES",俄文"ru-RU"意大利语"it-IT",印地语"hi-IN",十种语言
    [[IMSBoneConfiguration sharedInstance] set:@"language" value:@"zh-CN"];
  • 设置服务器区域
    根据App当前连接的服务器来设置容器运行的区域
    //目前支持中国“china”,新加坡“singapore”
    [[IMSBoneConfiguration sharedInstance] set:@"region" value:@"china"];

使用方式

  • 通过路由打开UIViewController
    #import <IMSRouter/IMSRouter.h>
    
    NSURL *url = [NSURL URLWithString:@"link://router/{routerName}"];
    NSDictionary *para = @{@"key": @"value"};
    [[IMSRouterService sharedService] openURL:url
                                      options:para
                            completionHandler:^(BOOL success) {
                                    if (success) {
                                        NSLog(@"插件打开成功");
                                    } else {
                                        NSLog(@"插件打开失败");
                                    }
                                }];
  • 打开插件面板并接收返回值

    参见调用配网插件,并接受配网结果的示例。

    #import <IMSRouter/IMSRouter.h>
    
    NSURL *url = [NSURL URLWithString:@"link://router/connectConfig"];
    NSDictionary *para = @{AKRouterCompletionHandlerKey: ^(NSError *error, NSDictionary *result) {
                // result handler
            }};
    [[IMSRouterService sharedService] openURL:url
                                      options:para
                            completionHandler:^(BOOL success) {
                                    if (success) {
                                        NSLog(@"插件打开成功");
                                    } else {
                                        NSLog(@"插件打开失败");
                                    }
                                }];
  • 直接打开UIViewController
    #import <IMSBoneKit/BoneRCTViewController.h>
    
    NSURL *url = [NSURL URLWithString:@"{插件URL地址}"];
    NSDictionary *para = @{@"key": @"value"};
    BoneRCTViewController *controller = [BoneRCTViewController new];
    [controller openUrl:newURL props:params];
    [self.navigationController pushViewController:controller animated:YES];
  • 本地Debug方式打开UIViewController

    调试时需使用Debug的ReactNative库,这样才会出现调试菜单,请修改Podfile文件如下。

    #pod 'AKReactNative', '0.41.2'
    pod 'AKReactNative', '0.41.2-debug' #这是 Debug 版本,请勿使用该版本发上 appStore
    					

    示例代码如下。

    __weak typeof(self) wSelf = self;
    NSURLSession *session = [NSURLSession sharedSession];
    NSString *host = @"/*启用Bone服务的电脑IP*/";
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@:8081/boneDebugUrl?platform=ios&ip=%@", host, host]];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            if (!error) {
                NSDictionary *responseJSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
                int responseCode = [[responseJSON objectForKey:@"code"] intValue];
                if (responseCode == 200) {
                    NSDictionary *responseData= [responseJSON objectForKey:@"data"];
                    NSString *urlString = responseData[@"url"];
                    BoneRCTViewController *controller = [BoneRCTViewController new];
                    [controller openUrl:[NSURL URLWithString:urlString] props:[responseData mutableCopy]];
                    controller.hidesBottomBarWhenPushed = YES;
                    [self.navigationController pushViewController:controller animated:YES];
                }
            }
        });
    }];
    [task resume];

集成账号能力

BoneKit支持账号插件,可以支持自定义账号接入,可以自行实现IMSAccountProtocol,IMSAccountUIProtocol协议,然后设置IMSAccountService的sessionProvider,accountProvider 来完成。如账号使用OpenAccount对接的话,可以参考账号Demo下IMSOpenAccount的实现。

代码示例如下。

// 引入头文件
#import <IMSAccount/IMSAccountService.h>

IMSOpenAccount *openAccount = [IMSOpenAccount sharedInstance];
[IMSAccountService sharedService].sessionProvider = openAccount;
[IMSAccountService sharedService].accountProvider = openAccount;

Native和JS共享配置

某些业务场景下,Native端和JS端可能需要共享一些配置。为了满足这个需求,我们开辟了一个Native和JS都可以访问的配置区。

  • JS端访问配置区,请参见环境配置信息
  • iOS端访问配置区,参考如下代码。
    // 设置
    [[IMSBoneConfiguration sharedInstance] set:@"region" value:@"china"];
    
    // 获取
    [[IMSBoneConfiguration sharedInstance] get:@"region"];