Flutter感知功能插件percept_flutter的使用
Flutter感知功能插件percept_flutter的使用
引言
本文档将详细介绍如何使用Percept Flutter SDK。
开始使用
1. 安装
-
在你的项目
pubspec.yaml
文件中添加以下依赖项:dependencies: percept_flutter: ^5.0.2
-
使用以下命令安装包:
$ flutter pub get
-
在你的Dart代码中导入该包以供使用:
import 'package:percept_flutter/percept_flutter.dart';
2. 初始化Percept SDK
import 'package:percept_flutter/percept_flutter.dart';
class YourClassState extends State<YourClass> {
Percept percept;
@override
void initState() {
super.initState();
percept = Percept(token);
}
}
Percept
构造函数接受一些可选参数,如下所示:
参数名 | 描述 | 默认值 |
---|---|---|
autoCaptureAppLifecycleEvents | 是否自动捕获应用生命周期事件 | true |
autoCaptureUnhandledErrors | 是否自动捕获未处理的错误 | true |
maxBatchSize | 事件请求的默认批次大小 | 100 |
maxDelayMins | 失败时重试请求的最大间隔时间 | 30分钟 |
maxCacheSizeMb | 存储失败请求的最大缓存大小 | 10MB |
clearAfterDays | 重新尝试失败后存储的失败请求在多少天后被删除 | 7天 |
enableExperiment | 启用或禁用服务中的实验功能 | false |
experimentFetchedCb | 当获取到实验数据时触发的回调函数 | undefined |
experimentRefetchIntervalMin | 指定在多少分钟内重新获取实验数据 | undefined |
int maxBatchSize = 100,
int maxDelayMins = 30,
int maxCacheSizeMb = 10,
int clearAfterDays = 7
注意: token
是与您的应用关联的Percept工作区令牌。
3. 设置用户
成功初始化SDK后,在登录时使用以下函数设置当前用户:
percept.setUser(
userId: "userId",
userProperties: {UserProperty.name: "TestUser"},
additionalProperties: {"isVerifiedAccount": true}
);
4. 设置当前用户属性
使用 setCurrentUserProperties
方法来设置由 setUser
创建的用户配置文件上的属性:
// 首先调用此方法
await percept.setUser(userId: 'U1');
// 设置用户 `deviceToken` 和 `isPaidUser` 属性为true
percept.setCurrentUserProperties(
userProperties: {UserProperty.deviceToken: "token"},
additionalProperties: {"isPaidUser": true}
);
用户属性只能包含在 UserProperty
枚举中的键,如下所示:
用户属性名称 | 描述 |
---|---|
userId | 与用户关联的用户ID |
name | 用户姓名 |
phone | 与用户关联的电话号码 |
与用户关联的电子邮件ID | |
deviceToken | 设备的FCM令牌 |
注意: 要获取您的Firebase令牌,可以使用:
FirebaseMessaging.instance.getToken()
或
FirebaseMessaging.instance.onTokenRefresh.listen((token) => { });
5. 互动
与Firebase Messaging集成:以简化推送通知功能并准确监控其对归因的影响
- 捕获当应用程序从终止状态通过交互推送通知启动会话时的事件。
// 获取导致应用程序从终止状态打开的任何消息。
RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage();
if (initialMessage != null) {
_percept.trackPNTerminated(initialMessage.toMap());
}
- 捕获当应用程序从后台状态通过交互推送通知恢复会话时的事件。
// 获取导致应用程序从终止状态打开的任何消息。
FirebaseMessaging.onMessageOpenedApp.listen(
(message) => _percept.trackPNBackground(message.toMap()),
);
- 捕获当应用程序处于前台状态并且接收到推送通知时的事件。
// 获取当应用程序处于前台时接收到的任何消息。
FirebaseMessaging.onMessage.listen(
(message) => _percept.trackPNForeground(message.toMap()),
);
- 通知SDK在终止状态下接收通知以便更好地归因
在调用 runApp
之前注册处理器。有关后台FCM消息处理的详细信息,请参阅 https://firebase.google.com/docs/cloud-messaging/flutter/receive#background_messages
import 'package:percept_flutter/constants.dart';
import 'package:percept_flutter/utils/comm_helpers.dart';
@pragma('vm:entry-point')
Future<void> bgMessageHandler(RemoteMessage message) async {
CapturePerceptCommRequest(
PerceptCommunicationState.received,
message.toMap(),
PERCEPT_TEST_KEY
);
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(options: DefaultOptions.currentPlatform);
FirebaseMessaging.onBackgroundMessage(bgMessageHandler);
runApp(MyApp());
}
此属性将在每个随后跟踪的事件中通过 pi_pn_attribution
属性进行跟踪。
pi_pn_attribution | 描述 |
---|---|
terminated | 与pn的交互从终止状态启动了当前应用程序会话 |
background | 与pn的交互从后台状态恢复了当前应用程序会话 |
foreground | 通知是在应用程序处于前台状态时接收到的 |
none | 当前会话不归因于任何pn |
除了 pi_pn_attribution
属性外,还会跟踪以下属性:
Property_name | 描述 |
---|---|
pi_pn_targetUrl | 通知负载中的目标URL |
pi_pn_campaignId | 与通知关联的活动ID |
pi_pn_campaignName | 与通知关联的活动名称 |
pi_pn_campaignSource | 与通知关联的活动来源 |
注意: 必须实现Firebase Messaging才能启用这些属性的支持。
6. 发送事件
您可以使用以下函数捕获事件。Percept会自动生成一个唯一的ID,并将其存储在本地存储或cookie中。
// 仅跟踪事件名称
percept.capture('Referral Banner Click');
// 跟踪带有属性的事件名称
percept.capture('Screen View', {'screenName': 'Homepage'});
// 跟踪已处理的错误
percept.captureError(error, stackTrace);
在初始化库后,Percept将自动跟踪一些默认属性。
7. 设置全局属性
设置全局属性,这些属性将与所有后续事件一起传递:
percept.setGlobalProperties({'global-property-key', 'value'});
8. 获取所有全局属性
获取所有全局属性:
percept.getGlobalProperties();
9. 清除
在注销时调用清除函数以删除所有与用户相关的数据:
percept.clear();
SDK自动跟踪的事件
事件名称 | 控制参数 | 描述 |
---|---|---|
App Opened | autoCaptureAppLifecycleEvents | 当Percept SDK初始化时触发 |
App Active | autoCaptureAppLifecycleEvents | 当应用程序进入前台时触发 |
App Backgrounded | autoCaptureAppLifecycleEvents | 当应用程序进入后台时触发 |
App Session | autoCaptureAppLifecycleEvents | 当应用程序会话完成时触发 |
App Installed | autoCaptureAppLifecycleEvents | 当应用程序首次安装时触发 |
App Updated | autoCaptureAppLifecycleEvents | 当应用程序更新时触发 |
SDK跟踪的属性
属性名称 | 描述 |
---|---|
pi_app_name | 应用程序名称 |
pi_app_version | 类似 “2.3.7” 的友好应用程序版本 |
pi_app_build | 类似 “2.3.7” 或 “237” 的构建号 |
pi_os_name | 类似iOS或Android的操作系统名称 |
pi_os_version | 操作系统版本 “7.1.3” |
pi_sdk_type | PI SDK类型,如Flutter或Native |
pi_sdk_version | PI SDK版本 |
pi_pn_attribution | 如果当前会话归因于PN交互,则进行跟踪 |
除了其他平台特定的设备信息外,还包括:
IOS:
属性名称 | 描述 |
---|---|
pi_systemName | 当前操作系统的名称 |
pi_systemVersion | 当前操作系统版本 |
pi_model | 设备型号 |
pi_isPhysicalDevice | 如果应用程序在模拟器中运行则为false,否则为true |
Android:
属性名称 | 描述 |
---|---|
pi_brand | 产品/硬件将与其关联的消费者可见品牌 |
pi_device | 工业设计的名称 |
pi_hardware | 硬件名称(来自内核命令行或/proc) |
pi_manufacturer | 产品的制造商/硬件 |
pi_model | 最终用户的可见名称 |
pi_product | 整个产品的名称 |
pi_isPhysicalDevice | 如果应用程序在模拟器中运行则为false,否则为true |
pi_systemFeatures | 描述当前设备上可用的功能 |
处理实验
1. 启用实验
要启用实验跟踪,将 enableExperiment
选项设置为 true
在 initOptions
中。您还可以指定一个回调函数以在获取到实验数据时处理数据。
final initOptions = InitOptions(
enableExperiment: true,
experimentFetchedCb: (data) {
final experimentData = data['experimentData'];
final experimentUserType = data['experimentUserType'];
final isExperimentDataResolved = data['isExperimentDataResolved'];
if (isExperimentDataResolved) {
print('Experiment data fetched: $experimentData');
} else {
print('Experiment data could not be resolved.');
}
},
experimentRefetchIntervalMin: 10, // 每10分钟重新获取一次实验数据
);
Percept('Your Project Token', initOptions);
注意: experimentRefetchIntervalMin
选项设置了自动重新获取实验数据的时间间隔(分钟)。间隔必须至少为5分钟。如果提供了小于5的值,它将自动设置为5分钟,并记录警告。
2. 获取实验数据
您可以随时使用 getExperiment
方法获取实验数据。此方法返回一个Future,解析为指定实验的变体数据。
final experimentName = 'example-experiment';
final variant = await percept.getExperiment(experimentName);
if (variant) {
print('User is in variant: $variant');
} else {
print('No variant data available');
}
3. 重新获取实验数据
如果您设置了 experimentRefetchIntervalMs
选项,SDK将在指定的时间间隔内自动重新获取实验数据。您也可以使用 refetchExperiment
方法手动重新获取实验数据。
await percept.refetchExperiment();
4. 获取所有活动的实验
您可以使用 getAllActiveExperiments
方法获取所有活动的实验及其变体。
final activeExperiments = await percept.getAllActiveExperiments();
print('Active experiments:', activeExperiments);
5. 获取实验用户类型
您可以使用 getExperimentUserType
方法获取实验的用户类型。
final userType = await percept.getExperimentUserType();
print('Experiment user type:', userType);
更多关于Flutter感知功能插件percept_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter感知功能插件percept_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用percept_flutter
插件的一个示例。percept_flutter
插件通常用于设备感知功能,比如光线传感器、加速度计等。不过,请注意,实际功能可能会根据插件的版本和设备的支持情况有所不同。
首先,确保你的Flutter环境已经设置好,并且已经创建了一个新的Flutter项目。
1. 添加依赖
在pubspec.yaml
文件中添加percept_flutter
依赖:
dependencies:
flutter:
sdk: flutter
percept_flutter: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来获取依赖。
2. 导入插件
在你需要使用感知功能的Dart文件中导入插件:
import 'package:percept_flutter/percept_flutter.dart';
3. 使用光线传感器示例
以下是一个使用光线传感器的简单示例:
import 'package:flutter/material.dart';
import 'package:percept_flutter/percept_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
double? lightLevel;
@override
void initState() {
super.initState();
_listenToLightSensor();
}
void _listenToLightSensor() async {
final lightSensor = LightSensor();
lightSensor.stream.listen((event) {
setState(() {
lightLevel = event.lux;
});
}, onError: (error) {
print('Error listening to light sensor: $error');
});
// Optional: Check initial light level
final initialLightLevel = await lightSensor.checkLightLevel();
setState(() {
lightLevel = initialLightLevel?.lux;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Light Sensor Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Light Level: ${lightLevel ?? 'Unknown'} lux',
style: TextStyle(fontSize: 24),
),
],
),
),
),
);
}
}
4. 使用加速度计示例
以下是一个使用加速度计的简单示例:
import 'package:flutter/material.dart';
import 'package:percept_flutter/percept_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late AccelerometerEvent? _lastAccelerometerEvent;
@override
void initState() {
super.initState();
_listenToAccelerometer();
}
void _listenToAccelerometer() {
final accelerometer = Accelerometer();
accelerometer.stream.listen((event) {
setState(() {
_lastAccelerometerEvent = event;
});
}, onError: (error) {
print('Error listening to accelerometer: $error');
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Accelerometer Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'X: ${_lastAccelerometerEvent?.x ?? '0.0'}\nX: ${_lastAccelerometerEvent?.y ?? '0.0'}\nX: ${_lastAccelerometerEvent?.z ?? '0.0'}',
style: TextStyle(fontSize: 20),
),
],
),
),
),
);
}
}
注意事项
- 确保设备支持所需的传感器。
- 在实际使用中,可能需要处理更多的边缘情况和错误处理。
- 根据插件的更新情况,API可能会有所变化,请参考最新的插件文档。
这些代码示例展示了如何在Flutter应用中使用percept_flutter
插件来访问光线传感器和加速度计的数据。根据你的具体需求,你可以进一步扩展这些示例。