国内站产品与国际站产品的开发有些区别,本文主要介绍国际站设备端开发需要额外修改的内容。

背景介绍

目前在中国内地之外的国家和地区(包括港澳台地区)支持3个region:新加坡、美国和德国。中国内地之外的设备激活联网时,将统一连接到新加坡激活中心。在设备绑定时,平台将根据App用户所在区域,自动将设备切换到相应的region(示例如下)。

  • 示例一:App用户注册时选择的国家为美国,平台会将该用户待绑定的设备切换到美国的服务器。
  • 示例二:App用户注册时选择的国家为欧洲国家,平台会将该用户待绑定的设备切换到德国的服务器。
  • 示例三:App用户注册时选择的国家为东南亚国家,设备连接新加坡服务器,此时无需切换region。

请确认您使用的生活物联网平台SDK版本,并确保版本为V1.1.0及以上版本。该版本SDK集成了设备自动切换region的功能,无需您额外修改代码。获取SDK请参见SDK概述与开发环境设置

基于V1.3.0及以上SDK编译

您基于V1.3.0以上版本开发时,请根据以下步骤编译国际站的固件。

  1. 修改build.sh默认变量参数。

    更多build.sh的参数说明请参见README.md

    产品类型:default_type="example"
    应用名称:default_app="smart_outlet"
    模组型号:default_board="uno-91h"
    连云区域:default_region=SINGAPORE //连接国内为MAINLAND
    连云环境:default_env=ONLINE
    Debug log:default_debug=0
    其他参数:default_args=""     //可配置其他编译参数
    说明default_region指定为SINGAPORE即可编译国际站固件,脚本会自动做好其他所需的配置。反之该参数指定为MAINLAND即可编译国内站固件。
  2. 执行./build.sh 编译固件。编译输出的固件存放在out/smart_outlet@uno-91h/目录下。

基于V1.1.0 SDK编译(linkkitapp)

如果基于AliOS Things中的linkkitapp开发应用,设备端固件需要修改以下两个配置来支持统一连接到新加坡激活中心。请您根据以下步骤操作。

  1. 更改example下应用代码的domain type设定。
    example/linkkitapp/linkkit_example_solo.c文件的linkkit_main()函数中,如下图所示将domain_type的赋值从IOTX_CLOUD_REGION_SHANGHAI改为IOTX_CLOUD_REGION_SINGAPORE参数修改
  2. example/linkkitapp/make.settings文件中,将FEATURE_MQTT_DIRECT的状态设置为关闭(即如下图所示配置为n)。
    参数修改
  3. example/linkkitapp/app_entry.c文件的函数application_start中,确认set_iotx_info()放在netmgr_init()前面,如下图所示。
    参数修改
  4. 编译linkkitapp程序。
    以mk3080模组为例,执行以下代码编译。
    aos make linkkitapp@<模组名>

    编译输出的固件存放在out/linkkitapp@mk3080/binary/ 目录下。

基于V1.1.0 SDK编译(living_platform)

如果基于含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目录下。

常见问题

Q:国际站设备是否可以不关闭FEATURE_MQTT_DIRECT

A:国际站设备必须关闭FEATURE_MQTT_DIRECT,否则会存在GDPR合规风险,以及设备通过公版App配网绑定后在部分区域无法正常激活的问题。

Q:如果已有FEATURE_MQTT_DIRECT未关闭的设备送样、出货应该怎么处理?

A:请尽快按本文档中描述的步骤修改,并进行设备固件OTA升级,设备升级时请注意选择静默升级(即App确认升级选项选否),并且升级策略选择动态升级(动态升级将持续维护需升级的设备范围,包括当前已经上报版本号的设备和新激活的设备),需要先做固件验证,再做批量升级,详细的OTA步骤请参见固件升级

Q:国内站设备打开和关闭FEATURE_MQTT_DIRECT有什么区别?

A:打开FEATURE_MQTT_DIRECT为直连模式,关闭FEATURE_MQTT_DIRECT为预认证模式,国内设备在两种模式下都能建立连接,区别是后者连接速度慢一点。因此,建议国内站设备用直连模式,国际站设备用预认证模式。

Q:国内站设备和国际站设备需要维护两个固件吗?

A:是的,国内站设备和国际站设备的ProductKey是不一样的,生产烧录的时候对设备证书和固件要做相应的管理。

Q:国际站设备一定要用生活物联网平台SDK v1.1.0及以上的版本吗?

A:是的,中国内地以外国家和地区(包括港澳台地区)统一激活中心需要设备端支持region切换。

后续步骤

完成国际站设备端开发后,您还需要开发App端,请参见国际站开发实践专题