设备控制 UI 业务包

更新时间:2024-10-31 02:50:49下载pdf

设备控制 UI 业务包是涂鸦智能设备控制面板的免开发维护、且具备动态更新的面板控制解决方案。在智能生活 App SDK 的基础上,设备控制 UI 业务包提供一套完整的面板加载展示、设备控制的能力。您无需额外开发,接入 UI 业务包即可使用。涂鸦提供两种技术方案,即 RN 面板小程序面板。下文是关于 RN 面板的接入文档,如果要使用小程序面板方案,参考 小程序接入文档

准备工作

  • 在 Android Studio 中建立您的工程,接入 智能生活 App SDK 和添加 UI 业务包框架,完成相关资源的引入及初始化工作。详情请参考 接入框架

  • 另外,您可以在 GitHub 下载 UI 业务包 Demo,修改 Demo 中的 Panel 模块的依赖来调试设备控制 UI 业务包,以及参考其中 app 模块的配置。

接入配置

必选配置


dependencies {
    api enforcedPlatform("com.thingclips.smart:thingsmart-BizBundlesBom:${biz_bom_version}")
    //设备控制业务包-必选
    implementation 'com.thingclips.smart:thingsmart-bizbundle-panel'
    //基础扩展能力-必选
    implementation "com.thingclips.smart:thingsmart-bizbundle-basekit"
    //业务扩展能力-必选
    implementation "com.thingclips.smart:thingsmart-bizbundle-bizkit"
    //设备控制相关能力-必选
    implementation "com.thingclips.smart:thingsmart-bizbundle-devicekit"
    api "com.thingclips.smart:thingsmart:${sdk_version}}"
}

可选配置

  • 多媒体扩展能力

     implementation "com.thingclips.smart:thingsmart-bizbundle-mediakit"
    
  • 家庭服务相关依赖

    家庭也是场景智能执行的最大单位。家庭服务主要包括家庭管理、成员管理、房间管理等业务,是对配网后的设备进行管理的基础条件。设备在配网后可设置家庭中设备所处的房间,同时,家庭下拥有不同权限的家庭成员对应着不同的操作权限。

     implementation "com.thingclips.smart:thingsmart-bizbundle-family"
    
  • IPC 面板相关依赖项

    此依赖包含加载 IPC 面板所需的所有相关依赖。如您无需 IPC 面板,不建议添加此依赖。如非必要而引入,会增加资源冲突的风险,同时也会增大 APK 包的体积。

     implementation 'com.thingclips.smart:thingsmart-bizbundle-camera_panel'
    
  • 地图相关依赖项

    设备控制 UI 业务包中包含地图能力相关 API,底层通过接入第三方库来实现。

    • 地图扩展能力

      implementation "com.thingclips.smart:thingsmart-bizbundle-mapkit"
      
    • 高德地图依赖项

      中国大陆地区业务只能依赖高德地图。基于设备控制 UI 业务包开发的 App,如果需要发布在中国大陆应用市场,请选择依赖高德地图。

      implementation 'com.thingclips.smart:thingsmart-react-native-amap:5.5.0'
      implementation 'com.amap.api:search:7.9.0'
      implementation 'com.amap.api:3dmap:8.1.0'
      
    • 谷歌地图依赖项

      其他国家或地区业务只能依赖谷歌地图。基于设备控制 UI 业务包开发的 App,如果需要发布在其他国家或地区,请选择依赖谷歌地图。

      implementation 'com.thingclips.smart:thingsmart-react-native-googlemap:4.8.2'
      implementation 'com.google.android.gms:play-services-maps:18.0.0'
      
  • RN 面板调试依赖项

    当需要调试 RN 面板时,可以依赖以下组件。建议在 release 包中移除这些依赖。

      implementation "com.thingclips.android.debugtool:thing_panel_tool:1.0.0"
    

业务包环境配置

  • 混淆配置

    在项目的 proguard-rules.pro 文件中,请您配置设备控制 UI 业务包混淆信息,以确保其能正常运行。

    # react-native
    -keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
    -keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip
    -keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters
    # Do not strip any method/class that is annotated with @DoNotStrip
    -keep @com.facebook.proguard.annotations.DoNotStrip class *
    -keep @com.facebook.common.internal.DoNotStrip class *
    -keepclassmembers class * {
        @com.facebook.proguard.annotations.DoNotStrip *;
        @com.facebook.common.internal.DoNotStrip *;
    }
    -keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {
        void set*(***);
        *** get*();
    }
    -keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }
    -keep class * extends com.facebook.react.bridge.NativeModule { *; }
    -keepclassmembers,includedescriptorclasses class * { native <methods>; }
    -keepclassmembers class *  { @com.facebook.react.uimanager.UIProp <fields>; }
    -keepclassmembers class *  { @com.facebook.react.uimanager.annotations.ReactProp <methods>; }
    -keepclassmembers class *  { @com.facebook.react.uimanager.annotations.ReactPropGroup <methods>; }
    -dontwarn com.facebook.react.**
    -keep class com.facebook.** { *; }
    -keep,includedescriptorclasses class com.facebook.react.bridge.** { *; }
    
    # 高德地图
    -dontwarn com.amap.**
    -keep class com.amap.api.maps.** { *; }
    -keep class com.autonavi.** { *; }
    -keep class com.amap.api.trace.** { *; }
    -keep class com.amap.api.navi.** { *; }
    -keep class com.autonavi.** { *; }
    -keep class com.amap.api.location.** { *; }
    -keep class com.amap.api.fence.** { *; }
    -keep class com.autonavi.aps.amapapi.model.** { *; }
    -keep class com.amap.api.maps.model.** { *; }
    -keep class com.amap.api.services.** { *; }
    
    # Google Play Services
    -keep class com.google.android.gms.common.** {*;}
    -keep class com.google.android.gms.ads.identifier.** {*;}
    -keepattributes Signature,*Annotation*,EnclosingMethod
    -dontwarn com.google.android.gms.**
    
    # MPAndroidChart
    -keep class com.github.mikephil.charting.** { *; }
    -dontwarn com.github.mikephil.charting.**
    
    -keep class com.thingclips.**.**{*;}
    -dontwarn com.thingclips.**.**
    
    -keep,includedescriptorclasses class com.facebook.v8.** { *; }
    
    #TTT
    -keep class * extends com.thingclips.android.universal.base.ThingBaseUniPlugin { *; }
    -keep class com.thingclips.smart.plugin.*.bean.**{ *; }
    
  • React Native 环境配置

    涂鸦设备控制 UI 业务包包含开源框架 React Native,版本为 0.59.10。

    • 若您的 Android 工程未集成 React Native,请按本文步骤集成设备控制 UI 业务包。
    • 若您的 Android 工程已集成 React Native,需按下面步骤操作,以确定是否可集成设备控制 UI 业务包:
      • 若已集成 React Native,且版本 > 0.59.10,因版本兼容性问题,则无法集成设备控制 UI 业务包。
      • 若已集成 React Native,且 0.59.10 ≥ 版本 > 0.51,因 React Native 库冲突,不保证能够正常接入涂鸦面板。按下面两种方式进行操作:
        1. 移除您 Android 工程中的 React Native,使用设备控制 UI 业务包依赖的 React Native 0.59.10。
        2. 将您 Android 工程中集成的 React Native 进行更名,从而避免与业务包集成的 React Native 冲突。

    若上述方式均无法集成 UI 业务包,则您无法接入集成设备控制 UI 业务包。

使用说明

本章节只展示部分跳转面板的接口。更多的详细的接口,请查看 AbsPanelCallerService 类。

打开设备面板

  • 跳转设备面板,无提示

    接口说明

    跳转到设备面板。如果设备已不存在,不会弹出 Toast 提示,直接 return 返回。

        goPanel(Activity activity, DeviceBean deviceBean);
    

    参数说明

    参数 说明
    activity 当前页面 context
    deviceBean 设备信息

    示例代码

      AbsPanelCallerService service = MicroContext.getServiceManager().findServiceByInterface(AbsPanelCallerService.class.getName());
      service.goPanel(PanelActivity.this, deviceBean);
    
  • 跳转设备面板,有提示

    接口说明

    跳转到设备面板,如果设备已不存在,会弹出 Toast 提示。

    goPanelWithCheckAndTip(Activity activity, String devId)
    

    参数说明

    参数 说明
    activity 当前页面 context
    devId 设备 ID,您可以通过智能生活 App SDK 接口获取

    示例代码

      AbsPanelCallerService service = MicroContext.getServiceManager().findServiceByInterface(AbsPanelCallerService.class.getName());
      service.goPanelWithCheckAndTip(PanelActivity.this,devId);
    

打开群组面板

  • 跳转群组面板,无提示

    接口说明

    跳转到群组。默认存在防抖,防抖阈值为 1.5 秒。如果群组已不存在,不会弹出 Toast 提示。

        goPanel(Activity activity, GroupBean groupBean, boolean isAdmin);
    

    参数说明

    参数 说明
    activity 当前页面 context
    groupBean 群组信息
    isAdmin 是否是管理员。
    • 如果非管理员,当群组没有设备时,仅弹出 Toast 提示。
    • 如果是管理员,会引导进入群组管理。

    示例代码

      AbsPanelCallerService service = MicroContext.getServiceManager().findServiceByInterface(AbsPanelCallerService.class.getName());
      service.goPanel(PanelActivity.this, groupBean, false);
    
  • 跳转面板,有提示

    接口说明

    跳转到设备面板,如果设备已不存在,会弹出 Toast 提示。

      goPanelWithCheckAndTip(Activity activity, long groupId, boolean isAdmin);
    

    参数说明

    参数 说明
    activity 当前页面 context
    groupId 设备 groupId,可以通过智能生活 App SDK 接口获取
    isAdmin 是否是管理员。
    • 如果非管理员,当群组没有设备时,仅弹出 Toast 提示。
    • 如果是管理员,会引导进入群组管理。

    示例代码

    AbsPanelCallerService service = MicroContext.getServiceManager().findServiceByInterface(AbsPanelCallerService.class.getName());
    service.goPanelWithCheckAndTip(PanelActivity.this, groupId,true);
    

关闭设备控制面板

ThingSmartSdk.getEventBus().post(new PageCloseEventModel());

清除缓存

在加载面板过程中,会将面板文件会存放在当前 app 存储目录下。下次打开面板时,从缓存中加载该文件。如果面板文件包内容发生变更,需先清除缓存,再重新拉起新的面板文件包,变更内容才会生效。

调用该接口会删除所有面板文件,加载面板时都将重新拉取文件。

示例代码

ClearCacheService service = MicroContext.getServiceManager().findServiceByInterface(ClearCacheService.class.getName())
if (service != null) {
    service.clearCache(PanelActivity.this);
}

设置面板调试功能

在依赖了面板调试的可选依赖后,打开以下页面,来设置面板调试的连接 IP 地址。

示例代码

startActivity(new Intent(this, ThingRCTPanelDebugActivity.class));

GitHub 示例代码

请访问 GitHub 获取 tuya-ui-bizbundle-android-demo

常见问题

打开设备面板时,提示当前版本不支持该设备,请至应用市场升级 App

检查项目的 module_app.json 文件中是否配置了 com.thingclips.smart.paneloutside.RNVersionPipeline

  • 如果未配置,请在 PIPE_LINE_APPLICATION_SYNC 下增加该 PipeLine 配置。

  • 如果已配置,请检查配置的位置是否正确。

    "PIPE_LINE_APPLICATION_SYNC": [
        ...
        "com.thingclips.smart.paneloutside.RNVersionPipeline"
    ]
    

设备面板中的 GIF 图无动效

可在项目中配置下列最新版本的依赖。

  implementation 'com.facebook.fresco:animated-drawable:2.6.0'
  implementation 'com.facebook.fresco:animated-webp:2.6.0'
  implementation 'com.facebook.fresco:animated-gif'

Release 包的设备控制 UI 业务包部分功能无法使用

请先检查 混淆配置 是否正确。

无法使用打开设备面板

接入设备控制 UI 业务包之后,必须实现 家庭服务。否则,无法正常打开面板。

  AbsBizBundleFamilyService familyService = MicroServiceManager.getInstance().findServiceByInterface(AbsBizBundleFamilyService.class.getName());
  familyService.shiftCurrentFamily(homeBean.getHomeId(), homeBean.getName());