Flutter集成RDC服务插件rdc_flutter_sdk的使用

Flutter集成RDC服务插件rdc_flutter_sdk的使用

概述

Rabbit Mobile SDK用于收集Rabbit各业务部门移动应用程序的在线数据。该SDK将被用于收集所有Rabbit客户在其所有业务单位中的在线行为交易,并开发成数据分析和数据科学模型,最终将用于数据货币化。

流程图

[流程图]

特性

Rabbit Data Online Collection SDK for Flutter提供了以下特性:

  • 内联配置 我们将在应用启动时通过内联代码配置实现可覆盖的配置。

  • 缓存 该SDK将使用缓存管理器作为其内存缓存来存储设备的静态数据,并使用MongoDB Realm来保留跟踪数据以备后续使用。

  • 触发向API后端发送数据 在数据发送到API后端之前,会检查CPU、内存和电池条件。所有条件通过后,SDK将数据发送到API后端。

使用SDK

前提条件

  • iOS 12.0或更高版本。
  • Android 7.0或更高版本。
  • Flutter 2或更高版本。

平台支持

Android iOS
✔️ ✔️

安装插件

dependencies:
  rdc_flutter_sdk: ^0.0.23-dev-4
  realm: ^3.2.0

设置

Dart设置

// 使用插件 https://pub.dev/packages/permission_handler

await Permission.location.request(); // Android, iOS
await Permission.appTrackingTransparency.request(); // iOS only

Android设置

AndroidManifest.xml文件中添加以下行:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

build.gradle文件中添加以下行:

allprojects {
    repositories {
        google()
        mavenCentral()

        // 添加这一行
        configurations.all {
            resolutionStrategy {
                force "com.google.android.gms:play-services-location:21.0.1"
            }
        }
    }
}

iOS设置

Info.plist文件中添加以下行:

<!-- 位置权限选项 -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>需要使用位置信息</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>始终和使用时都需要位置信息!</string>
<key>NSLocationUsageDescription</key>
<string>旧设备需要位置信息。</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>我可以一直获取位置吗?</string>
<key>UIBackgroundModes</key>
<string>location</string>

<!-- 应用追踪透明度权限选项 -->
<key>NSUserTrackingUsageDescription</key>
<string>应用追踪透明度</string>

Podfile文件中添加以下行:

## dart: PermissionGroup.appTrackingTransparency
'PERMISSION_APP_TRACKING_TRANSPARENCY=1',

## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
'PERMISSION_LOCATION=1',

配置

方法 参数 备注
setAPIKey String key 认证密钥
setEncryptionKey String key 加密密钥(仅支持hive)
setRotationTime int min = 1 发送数据到API的时间间隔
setDataCollectionType DataCollectionType type = rotation 发送数据的方式(立即或循环)
setRetentionDays int date = 30 清除已发送的数据
setDeleteAfterSent bool value = true 是否在发送后删除数据
setOfflineMode bool value = false 是否离线模式
setRetryOnFailed int time = 3 重试次数
setTriggerCondition int cpu = 0, int memory = 0, int batteryLevel = 0 发送数据的条件
setSessionExpire int min = 60 前台会话过期时间
setSessionAutoExpire int min = 30 会话自动过期时间
setConsent bool? value = null 用户同意
setPermissionMaid bool value = false 用户允许获取权限(仅Android)
setStorageCondition required int min, required int max 存储条件(最小值和最大值)

事件方法

方法 参数 备注
addEvent {required String eventName, required String eventValue, Map<dynamic, dynamic>? dataLayer} 添加事件日志到本地数据库
getEvents - 获取本地数据库中的事件列表
uploadEvent - 上传事件列表到API
clearAll - 删除所有数据
clearCache - 删除已发送的数据
sessionStart - 启动SDK会话
sessionEnd - 结束SDK会话

自定义数据层

限制条件:必须是扁平的JSON格式,并且所有对象都必须是varchar类型。

addEvent(dataLayer: {
    'custom_field_1': 'custom_field_1',
    'custom_field_2': 'custom_field_2',
});

示例

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:shop_app/controllers/example_controller.dart';
import 'package:shop_app/routes.dart';
import 'package:shop_app/screens/splash/splash_screen.dart';
import 'package:shop_app/theme.dart';
import 'package:rdc_flutter_sdk/rabbit_data.dart';
import 'package:get/get.dart';

import 'helper/storage_helper.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await _getPermission();

  var config = RabbitDataConfig(
    apiKey: 'GUawtArmlVOSlNbaTzwUMxBxlVqirqTc',
    dbType: DBType.realm,
    debugMode: true,
  );
  // 记住测试时使用
  config = await StorageHelper.initStorageConfig(config);
  var rabbitData = await RabbitData.initializeInstance(config);

  Get.put(rabbitData, tag: 'rabbit_data');

  // 示例控制器
  Get.put(ExampleController());
  HttpOverrides.global = MyHttpOverrides();
  runApp(MyApp());
}

// 解决Android 7上的请求错误
class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext? context) {
    return super.createHttpClient(context)
      ..badCertificateCallback = (X509Certificate cert, String host, int port) => true;
  }
}

class MyApp extends StatelessWidget {
  // 这个小部件是你的应用的根
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: theme(),
      // home: SplashScreen(),
      // 我们使用routeName,所以不需要记住名称
      initialRoute: SplashScreen.routeName,
      routes: routes,
    );
  }
}

_getPermission() async {
  await Permission.location.request();
}

尝试示例应用

  1. 克隆仓库:
    git clone https://bitbucket.org/bssh-rabbit/rdc-flutter-sdk/src/master/example
    

更多关于Flutter集成RDC服务插件rdc_flutter_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter集成RDC服务插件rdc_flutter_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


要集成 RDC 服务插件 rdc_flutter_sdk 到 Flutter 项目中,你可以按照以下步骤进行操作:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 rdc_flutter_sdk 依赖:

dependencies:
  flutter:
    sdk: flutter
  rdc_flutter_sdk: ^1.0.0 # 请根据实际情况填写版本号

然后,运行 flutter pub get 来获取依赖。

2. 初始化 SDK

在你的 Flutter 项目中,找到合适的位置(例如 main.dart 中的 main 函数)初始化 RDC SDK。

import 'package:rdc_flutter_sdk/rdc_flutter_sdk.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 RDC SDK
  await RdcFlutterSdk.init(
    appId: 'your_app_id', // 替换为你的 App ID
    appKey: 'your_app_key', // 替换为你的 App Key
    environment: RdcEnvironment.production, // 选择环境(开发或生产)
  );

  runApp(MyApp());
}

3. 使用 SDK 功能

根据 rdc_flutter_sdk 提供的 API,你可以在应用中使用 RDC 服务的各种功能。例如,启动 RDC 服务:

import 'package:rdc_flutter_sdk/rdc_flutter_sdk.dart';

void startRdcService() async {
  try {
    await RdcFlutterSdk.startService();
    print('RDC service started successfully');
  } catch (e) {
    print('Failed to start RDC service: $e');
  }
}

4. 处理回调

如果需要处理 SDK 的回调,可以设置监听器:

RdcFlutterSdk.setListener((RdcEvent event) {
  switch (event.type) {
    case RdcEventType.serviceStarted:
      print('RDC service started');
      break;
    case RdcEventType.serviceStopped:
      print('RDC service stopped');
      break;
    case RdcEventType.error:
      print('RDC service error: ${event.message}');
      break;
  }
});

5. 停止服务

在不需要 RDC 服务时,可以停止服务:

void stopRdcService() async {
  try {
    await RdcFlutterSdk.stopService();
    print('RDC service stopped successfully');
  } catch (e) {
    print('Failed to stop RDC service: $e');
  }
}
回到顶部