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();
}
尝试示例应用
- 克隆仓库:
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 回复