Flutter插件rdc_flutter_sdk_2的介绍与使用
Flutter插件rdc_flutter_sdk_2的介绍与使用
RDC Flutter SDK
概述
Rabbit Mobile SDK 是一组用于移动设备的开发工具包。该 SDK 将被用于标记和收集来自 Rabbit 各业务单元的移动应用程序的在线数据。
SDK 将用于收集所有 Rabbit 客户在各个业务单位中的在线行为交易数据,并将其发展为数据分析和数据科学模型,最终将用于数据货币化。
流程图
功能特性
Rabbit 数据在线收集 SDK for Flutter 提供以下功能:
内联配置
我们将在应用程序启动时通过内联代码配置实现可覆盖的配置。
缓存
SDK 将使用缓存管理器作为其内存缓存来存储设备的静态数据,并使用 MongoDB Realm 来保存跟踪数据以备后用。
发送数据到 API 后端的触发条件
在发送到 API 后端之前会检查 CPU、内存和电池条件。所有条件通过后,SDK 将发送数据到 API 后端。
使用 SDK
前置条件
- iOS 13.0 或更高版本。
- Android 8.0 或更高版本。
- Flutter 2 或更高版本。
平台支持
Android | iOS |
---|---|
✔️ | ✔️ |
插件安装
在 pubspec.yaml
文件中添加以下依赖项:
dependencies:
rdc_flutter_sdk_2: ^0.0.4
设置
Dart 设置
确保使用以下插件:
import 'package:permission_handler/permission_handler.dart';
await Permission.location.request(); // Android 和 iOS
await Permission.appTrackingTransparency.request(); // 仅适用于 iOS
Android 设置
在 AndroidManifest.xml
文件中添加以下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在 build.gradle
文件中添加以下配置:
allprojects {
repositories {
google()
mavenCentral()
// 添加此行
configurations.all {
resolutionStrategy {
force "com.google.android.gms:play-services-location:21.0.1"
}
}
}
}
iOS 设置
在 Info.plist
文件中添加以下权限选项:
<!-- Location permissions -->
<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>
<!-- App Tracking Transparency permissions -->
<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 | 存储条件:小于 min 不保存数据,min-max 范围内按 FIFO 保存数据 |
事件方法
以下是可用的事件方法及其参数说明:
方法名称 | 参数 | 备注 |
---|---|---|
addEvent | {required String eventName, required String eventValue, Map<dynamic, dynamic>? dataLayer} | 添加事件日志到本地数据库 |
getEvents | - | 获取本地数据库中的事件列表 |
uploadEvent | - | 将本地数据库中的事件上传到 API |
clearAll | - | 删除所有数据 |
clearCache | - | 删除已发送的数据 |
sessionStart | - | 开始 SDK 会话 |
sessionEnd | - | 结束 SDK 会话 |
自定义数据层
自定义数据层必须是扁平化的 JSON,且所有对象都必须为字符串类型:
addEvent(dataLayer: {
'custom_field_1': 'custom_field_1',
'custom_field_2': 'custom_field_2',
});
示例代码
以下是一个完整的示例代码,展示了如何初始化和使用插件:
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:rdc_flutter_sdk_2/rabbit_data.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
// 请求权限
await Permission.location.request();
await Permission.appTrackingTransparency.request();
// 初始化配置
var config = RabbitDataConfig(
apiKey: 'GUawtArmlVOSlNbaTzwUMxBxlVqirqTc', // 必填
debugMode: true, // 可选,默认 false
);
// 初始化 RabbitData 实例
var rabbitData = await RabbitData.initializeInstance(config);
// 添加事件
await rabbitData.addEvent('init_app', 'init_app');
// 启动应用
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
home: SplashScreen(), // 替换为你的启动页面
);
}
}
运行示例应用
-
克隆仓库:
git clone https://bitbucket.org/bssh-rabbit/rdc-flutter-sdk/src/master/example
-
在 VSCode 或 Android Studio 中打开项目文件夹。
-
在终端中运行以下命令:
flutter run
更多关于Flutter插件rdc_flutter_sdk_2的介绍与使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在使用一个未知功能的Flutter插件(如 rdc_flutter_sdk_2
)时,由于缺乏官方文档或明确的功能描述,我们需要通过一些方法来探索和理解其功能。以下是一些步骤和建议,帮助你更好地使用这个插件:
1. 查看插件的源代码
- 如果插件是开源的,你可以直接查看其源代码,了解其实现的功能。
- 在
pubspec.yaml
中指定插件的版本后,可以在~/.pub-cache/hosted/pub.dartlang.org/
目录下找到插件的源代码。
2. 查看插件的 pubspec.yaml
文件
- 插件的
pubspec.yaml
文件通常包含一些基本信息,如插件的名称、版本、依赖项等。通过查看这些信息,你可以初步了解插件的用途。
3. 查看插件的 README.md
文件
- 如果插件有
README.md
文件,通常会包含插件的使用说明、功能描述、示例代码等。即使插件的功能描述为undefined
,README.md
文件仍可能提供一些有用的信息。
4. 查看插件的 example
目录
- 许多 Flutter 插件会附带一个
example
目录,其中包含示例代码。通过运行示例代码,你可以直观地了解插件的功能。
5. 查看插件的 API 文档
- 如果插件有生成 API 文档,你可以通过查看文档来了解其提供的类、方法和属性。通常可以通过
dartdoc
工具生成 API 文档。
6. 尝试使用插件
- 如果以上方法都无法提供足够的信息,你可以尝试在项目中导入插件,并调用其提供的方法,观察其行为。
- 例如:
import 'package:rdc_flutter_sdk_2/rdc_flutter_sdk_2.dart'; void main() { // 尝试调用插件的方法 RdcFlutterSdk2.initialize(); // 观察插件的输出或行为 }
7. 查看插件的依赖项
- 插件的依赖项可能会提供一些线索,帮助你理解其功能。例如,如果插件依赖了某个网络库,可能说明它与网络请求相关。
8. 搜索插件的名称
- 在搜索引擎或 GitHub 上搜索插件的名称,可能会找到相关的讨论、问题或使用示例。
9. 联系插件的作者
- 如果插件是开源的,你可以尝试联系插件的作者,询问其功能和使用方法。
10. 使用调试工具
- 使用 Flutter 的调试工具(如
flutter logs
)来观察插件的输出和日志,可能会帮助你理解其功能。
示例代码
假设你已经将 rdc_flutter_sdk_2
添加到 pubspec.yaml
文件中,你可以尝试以下代码:
dependencies:
flutter:
sdk: flutter
rdc_flutter_sdk_2: ^1.0.0 # 假设版本为1.0.0
import 'package:flutter/material.dart';
import 'package:rdc_flutter_sdk_2/rdc_flutter_sdk_2.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('RDC Flutter SDK 2 Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 尝试调用插件的方法
RdcFlutterSdk2.initialize();
// 观察插件的输出或行为
},
child: Text('Initialize SDK'),
),
),
),
);
}
}