国内站产品与国际站的开发有些地方不一致,此文主要介绍的是国际站需要修改的内容。

设备端开发

在海外设备激活联网时,将统一连接到新加坡激活中心。在设备绑定时,平台将根据用户所在区域,自动将设备切换到相应的region。例如:用户注册时选择的国家为美国,平台会将该用户待绑定的设备切换到美国的服务器。

  • 请确认使用最新的生活物联网平台SDK( v1.1.0),获取最新的生活物联网平台SDK请参见SDK概述与开发环境设置

    该版本SDK集成了设备端根据平台下发的指令切换到对应region的功能,无需额外修改代码。

  • 设备端固件需要修改以下两个配置来支持统一连接到新加坡激活中心。如果基于AliOS Things中的linkkitapp开发应用,需要进行如下手动修改。
    • 更改example下应用代码的domain type设定。在example/linkkitapp/linkkit_example_solo.c文件的linkkit_main()函数中,如下图所示将domain_type的赋值从IOTX_CLOUD_REGION_SHANGHAI改为IOTX_CLOUD_REGION_SINGAPORE参数修改
    • example/linkkitapp/make.settings文件中,将FEATURE_MQTT_DIRECT的状态设置为关闭(即如下图所示配置为n)。参数修改
  • 如果基于AliOS Things中的living_platform开发应用,example/living_platform/gen_firmware.sh编译脚本支持通过不同选项编译海外和国内的固件。编译时根据中国大陆和海外的不同选项,domain type变量和宏FEATURE_MQTT_DIRECT会被自动配置,无需再手动修改。

    以下介绍如何基于gen_firmware.sh脚本编译固件。

    1. 打开gen_firmware.sh文件,按红色标识指定board。参数修改
    2. 执行以下命令编译脚本。
      bash gen_firmware.sh
      参数选择
    3. 选择要编译的固件。
      • c:每次编译前需进行clean操作
      • 3:编译国内站固件
      • 5:编译国际站固件
    4. 查看编译结果。

      该示例编译输出的固件存放在out/living_platform@boardname/binary目录下。

控制台配置

  1. 选择站点为国际站
  2. 人机交互 > 多语言管理中配置英文。
    多语言管理

客户端开发

  1. 替换安全图片。
    如果您在国内站的App基础上进行修改,请务必替换安全图片
  2. 切换安全图片。

    如果您的App需要支持中国版与国际版进行切换,则需要通过以下修改进行安全图片切换。

    • Android端代码中切换安全图片
      1. 修改安全图片名称后缀(原后缀为“114d”),使用后缀来区分不同的安全图片。

        例如:开发国内develop_china 、开发国外 develop_oversea、生产国内product_china 、生产国外product_oversea。

      2. 在不同的的环境下,修改相关SDK的authCode参数,将原先后缀“114d”修改为不同环境的安全图片后缀名称即可。
      3. 修改SDK。
        • 长链接通道
          String securityIndex = "develop_china";
          MobileConnectConfig config = new MobileConnectConfig();
          config.securityGuardAuthcode = securityIndex;
        • OA SDK初始化
          String securityIndex = "develop_china";
          ConfigManager.getInstance().setSecGuardImagePostfix(securityIndex);
          OALoginAdapter loginAdapter = new OALoginAdapter(app);
          loginAdapter.init(env, securityIndex);
        • API ClientSDK初始化
          String securityIndex = "develop_china";
          // 初始化 IoTAPIClient
          IoTAPIClientImpl.InitializeConfig config = new IoTAPIClientImpl.InitializeConfig();
          //设置authCode
          config.authCode = securityIndex;
          //获取appkey
          String appKey = APIGatewayHttpAdapterImpl.getAppKey(app,  securityIndex);
    • iOS端代码中切换安全图片

      安全图片原理:安全图片下包含了appkey、BundleId Identifier。外部开发者默认访问的是线上环境,所以切换安全图片,只需更改读取图片即可。

      1. 修改要导入的安全图片后缀名称(例如,将07e8h改为07e8_copy)。
      2. 导入安全图片到主工程之下,和原工程的yw_1222_07e8.jpg放一起。
      3. 选择Pods > Development Pods > IMSApiClientLaunch,打开IMSApiClientLaunch.m,并找到以下代码。
        NSString *autoCode = [envConfig valueForKey:kLauncherEnvAuthCode] ? : @"07e8";

        修改成如下代码。

        NSString *code = [[NSUserDefaults standardUserDefaults] objectForKey:@"IMSSaveSecurityImageCode"]  ?: @"07e8";
        NSString *autoCode = code;
      4. 在要切换的地方,传入要切换的图片code的标识名(即前面传入的07e8_copy),代码如下。
        [[NSUserDefaults standardUserDefaults] setObject:@"07e8_copy" forKey:@"IMSSaveSecurityImageCode"][[NSUserDefaults standardUserDefaults] synchronize];
        [self ims_showHUDWithMessage:@"切换安全图片,准备重启"];
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^(void){
            [[IMSAccountService sharedService] logout];
            exit(0);
        });
  3. 修改Host。
    • iOS端代码中修改host。
      1. API通道SDK初始化代码修改如下。
        [IMSConfiguration initWithHost:@"api-iot.ap-southeast-1.aliyuncs.com" serverEnv:IMSServerRelease];
      2. 长连接通道SDK初始化代码修改如下。
        config.autoSelectChannelHost = YES;
      3. 账号及用户SDK初始化代码修改host如下。
        [[ALBBOpenAccountSDK sharedInstance] setGwHost:@"sgp-sdk.openaccount.aliyun.com"];
    • Android端代码中修改host。
      1. API通道SDK初始化代码修改如下。
        config.host = “api-iot.ap-southeast-1.aliyuncs.com”;
      2. 长连接通道SDK初始化代码修改如下。
        config.autoSelectChannelHost = true;
      3. 账号及用户SDK初始化代码修改host如下。
        adapter.setDefaultOAHost("sgp-sdk.openaccount.aliyun.com");
  4. 根据业务需求,如需将中文切换成英文,请做如下修改。
    1. API通道SDK指定API请求的语言,服务器将根据指定的语言进行响应报文填充。注:当前仅支持zh-CNen-US两个选项。
      iOS端:
      [IMSConfiguration sharedInstance].language = @"en-US";
      Android端:
      IoTAPIClientImpl.getInstance().setLanguage("en-US");
    2. BoneMobile容器SDKiOS端API通道SDK中已切换语言的话,BoneMobile容器SDK中无需再次切换。
      Android端:
      String language = "en-US";//语言环境,目前仅支持“zh-CN”,“en-US”
    3. 移动推送SDK。
      使用API通道SDK切换语言之后,重新实现 deviceid 和用户体系绑定,即可切换语言,目前仅支持中文和英文。
    4. 切换内置账号的登录界面的语言。
      iOS端:  #pragma mark - option
                 interface ALBBOpenAccountSDK (Options)
                /*设置语言环境,不设置默认简体中文
                @param  i18nType @"en" /@" zh-Hans "/@" zh-Hant"*/
                - (void)setI18N: (NSString *)i18nType;
      Android端:
      ConfigManager.getInstance().setLanguageCode(LanguageCode.ENGLISH);

智能家居App(开发版)使用

  • 如果您的产品在“国际站”创建,App上请选择除中国大陆以外的任意地区。
  • 注册时,如果您使用的是国内手机号,请选择”+86“。

云端开发

调用云端API中的host也需更改,否则请求会失败。

  • Java版如下。
    ApiResponse response = syncClient.postBody("api-iot.ap-southeast-1.aliyuncs.com",
    "/cloud/token", request, true);
  • PHP版如下。
    function example() { 
    $path = "/cloud/token"; 
    $host = "https://api-iot.ap-southeast-1.aliyuncs.com"; 
    $appKey = "你的"; 
    $appSecret = "你的"
    ...
    }