设备控制 UI 业务包

更新时间:2023-11-07 01:41:12下载pdf

概述

设备控制 UI 业务包是涂鸦智能设备控制面板的免开发维护、且具备动态更新的面板控制解决方案。在涂鸦安卓版 智能生活 App SDK 的基础上,该 UI 业务包 提供一套完整的 RN 面板的加载展示、设备控制的能力。您无需额外开发,接入 UI 业务包即可使用。

接入指南

前置条件

在 Android Studio 中建立您的工程,接入 智能生活 App SDK 和添加 UI 业务包框架。详情请参考 接入框架

另外,您可以直接下载 UI 业务包的 Demo,修改 Demo 中的 Panel 模块的依赖来调试设备控制 UI 业务包。

业务包功能配置

必选配置

dependencies {
    api 'com.tuya.smart:tuyasmart-bizbundle-panel_base:1.0.0-cube'
    api 'com.tuya.smart:tuyasmart-bizbundle-rn_core:1.0.0-cube'
    api 'com.tuya.smart:tuyasmart-bizbundle-rn_biz:1.0.0-cube'
    api 'com.tuya.smart:tuyasmart-bizbundle-panel_ttt:1.0.0-cube'
}

可选配置

  • 地图相关依赖项

    设备控制 UI 业务包中包含地图能力相关 API,底层通过接入第三库方来实现。中国大陆业务依赖高德地图,中国大陆以外业务依赖谷歌地图。高德地图在中国大陆以外无法使用,谷歌地图在中国大陆功能受限。因此,基于设备控制 UI 业务包开发的 App,如果需要发布在中国大陆应用市场,请选择依赖高德地图,如果需要发布在谷歌市场,请选择依赖谷歌地图。二者选一,不要同时依赖。

    高德地图依赖项

      implementation 'com.tuya.smart:tuyasmart-react-native-amap:1.0.0-cube'
      implementation 'com.amap.api:search:7.9.0'
      implementation 'com.amap.api:navi-3dmap:8.0.0_3dmap8.0.0'
    

    谷歌地图依赖项

      implementation 'com.tuya.smart:tuyasmart-react-native-googlemap:1.0.0-cube'
      implementation 'com.google.android.gms:play-services-maps:17.0.0'
    
  • IPC 面板相关依赖项

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

     implementation 'com.tuya.smart:tuyasmart-bizbundle-camera_panel:1.0.0-cube'
    

业务包环境配置

混淆配置

在项目的 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.tuya.**.**{*;}
-dontwarn com.tuya.**.**

-keep,includedescriptorclasses class com.facebook.v8.** { *; }

#TTT
-keep class * extends com.tuya.android.universal.base.TYBaseUniPlugin { *; }
-keep class com.tuya.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 业务包。

使用指南

在使用设备控制 UI 业务包功能前,请确保已经按照 接入框架 的内容完成相关资源的引入及初始化工作。否则,设备控制 UI 业务包无法正常使用。您也可参考 UI 业务包 Demoapp 模块的配置。

打开面板

此处只展示部分跳转面板的接口。更多的详细的接口,请查看 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.5s。如果群组已不存在,不会弹出 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);
    

关闭设备控制面板

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

清除缓存

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

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

示例代码

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

常见问题

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

检查项目的 module_app.json 文件中是否配置 com.tuya.smart.panel.base.RNVersionPipeLine

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

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

    "PIPE_LINE_BUSINESS_PIPELINE_APPLICATION_START": [
        ...
        "com.tuya.smart.panel.base.RNVersionPipeLine"
    ],
    "PIPE_LINE_APPLICATION_SYNC": [
        "com.tuya.smart.panel.base.RNVersionPipeLine"
        ...
    ],
    

Q:设备面板中的 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'

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

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

Q:无法使用打开设备面板

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

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

其他

下载完整示例代码