reshub_flutter 0.0.11 copy "reshub_flutter: ^0.0.11" to clipboard
reshub_flutter: ^0.0.11 copied to clipboard

Flutter版本的shiply资源sdk

reshub_flutter #

Flutter版本的shiply资源sdk Android 底层依赖:com.tencent.rdelivery:reshub-sdk:1.7.40,工蜂地址 iOS 底层依赖:ResHub 1.10.13,工蜂地址

Getting Started #

1、配置依赖 #

在 Flutter 工程中的 pubspec.yaml 中添加 reshub_flutter 的依赖:

dependencies:

    reshub_flutter:
      hosted:
        name: reshub_flutter
        url: http://pub.oa.com
      version: 0.0.11

在代码中导入插件接口:

import 'package:reshub_flutter/reshub_flutter.dart';

iOS 需要在 Target 的 Build Settings 中设置 Allow Non-modular Incudes In Framework Modules = YES

2、初始化 reshub #

具体例子可以参考 example/lib/main.dart

2.1、在 dart 层初始化 ReshubCenter

    String deviceId = "device123";
    String appVersion = "1.2.3";
    // 是否是 debug 包
    bool isDebugPackage = false;
    Map<String, String> params = Map();
    params["testKey"] = "testValue";
    ReshubFlutter.initReshubCenter(deviceId, appVersion, isDebugPackage, params);
    // https://shiply.tds.woa.com/project/setting/normal?projectId=195 shiply体验项目 RDeliveryDemo-Android 产品
    if (Platform.isIOS) {
        ReshubFlutter.initReshub("14e1a90fcd", "d96d3d4a-fe58-4b8d-99c4-61d894a3d3bb", "online");
    } else if(Platform.isAndroid) {
        ReshubFlutter.initReshub("9d256c9ecc", "bfe91841-af1a-4572-9868-8b3c70a8d19c", "online");
    }

2.2、在 dart 层初始化 reshub 实例

ReshubFlutter reshubInstance = ReshubFlutter();

2.3、Navtive 层设置

Android 避免重复初始化

组件的初始化调用,需要结合具体业务场景来考虑: 组件本身设计为单例模式,多次调用,只会生效一次。 在混合工程中,如果 Native 侧已经对 Reshub 组件进行过初始化,对于 Android 平台,需要在 Native 初始化 Reshub 组件的代码处额外调用:

ReshubHostApiImpl.markHasInitReshubCenter()
iOS 避免重复初始化
[[ReshubHostApiImpl sharedInstance] markHasInitReshubCenter];
Android 对接日志实现

如果是混合工程,并且Native 侧已经设置过 Reshub 组件日志实现,可以不用再额外设置; 如果Native 侧没有设置过 Reshub 组件日志实现,需要在 dart 层初始化 ReshubCenter 之前,先设置好日志实现类:

ReshubHostApiImpl.setLogDelegate(log: IRLog)
iOS 对接日志实现
  • 接出日志,需要实现 RaftInterface 标准里的 RAFTLogProtocol 协议

    # 复制 RDelivery 的 RDLoggerImpl 文件,将 NSLog 一行换成App中打印日志的函数即可。
    https://git.woa.com/RDelivery/Core/rdelivery-ios/blob/master/RDelivery/DefaultInjectImpl/Log/RDLoggerImpl.m
    
  • 替换成自己日志实现,完成日志接出

    @interface CustomDependImpl : ResHubDependImpl
    @end
      
    @implementation CustomDependImpl
    + (instancetype)defaultDepends {
        CustomDependImpl *depend = [super defaultDepends];
        // ResHubDependImpl 下的所有组件,都可以替换成你的实现,以日志组件为例
        depend.logImpl = [CustomLogImpl sharedInstance];
        return depend;
    }
    @end
    
  • 依赖注入到 ResHub

    - (void)injectReshubDependImpl {
        CustomDependImpl *depend = [CustomDependImpl defaultDepends];
        [[ReshubHostApiImpl sharedInstance] injectDependImpl:depend];
    }
    

3、使用 reshub 实例加载资源 #

    // 业务方在 shiply 前端页面创建的资源 key 名字
    String resId = "test_res_key";
    
    // 获取资源 key 的锁定版本,同一个进程内多次调用都返回同一个版本
    reshubInstance.get(resId).then(
        (value) => printText("get result => path: ${value.localPath} "));
    
    // 获取资源 key 的最新版本,同一个进程内多次调用可能返回不同版本,比如使用过程中从 server 拉取到了更高的版本,则会返回高版本
    reshubInstance.getLatest(resId).then(
        (value) => printText("getLatest result => path: ${value.localPath} "));
    
    // 加载资源 key 的本地版本,同一个进程内多次调用都返回同一个版本,这个方法会异步尝试下载更高版本的资源
    reshubInstance.load(resId).then(
        (value) => printText("load result => isSuccess: ${value.isSuccess} "
            "path: ${value.resModel?.localPath},originLocalPath: ${value.resModel?.originLocalPath}"));
    
    // 加载资源 key 的最新版本,这个方法会同步尝试下载更高版本的资源
    reshubInstance.loadLatest(resId).then(
        (value) => printText("loadLatest result => isSuccess: ${value.isSuccess} path: ${value.resModel?.localPath}"));
1
likes
0
points
403
downloads

Publisher

unverified uploader

Weekly Downloads

Flutter版本的shiply资源sdk

Homepage

License

unknown (license)

Dependencies

flutter

More

Packages that depend on reshub_flutter

Packages that implement reshub_flutter