Flutter用户互动与推送管理插件dengage_flutter的使用
Flutter用户互动与推送管理插件dengage_flutter的使用
dengage_flutter
D·engage客户驱动营销平台(CDMP) 是一个集成了全渠道营销功能的客户数据平台(CDP)。它替代了您的营销自动化和跨渠道活动管理工具。更多关于D·engage的信息请参阅 这里。
此包简化了将D·engage与React-Native iOS和/或Android应用集成的过程。以下是安装react-native-dengage SDK到您的react-native应用程序的说明。
快速视频指南
以下是一段快速视频教程,展示了如何使用本文档将dengage_flutter SDK安装到您的Flutter应用中。 教程分为两部分,请按顺序观看。
安装
a) 编辑您的项目pubspec.yaml
文件以包含dengage_flutter
SDK:
dependencies:
dengage_flutter: ^0.2.3
b) 运行flutter pub get
来安装SDK。
c) 在您的Dart代码中访问DengageFlutter:
// 在导入部分添加
import 'package:dengage_flutter/dengage_flutter.dart'
// 在代码中某个位置添加
try {
Object result = await DengageFlutter.setIntegerationKey("");
print("result: $result");
} on PlatformException catch (error) {
print("error: $error");
} on Exception catch (error) {
print("exception: $error");
}
平台特定额外步骤
在安装完dengage_flutter
SDK后,还需要一些特定于平台的额外步骤才能使其正常工作。
iOS特定额外步骤
要求
- D·engage集成密钥
- iOS推送证书
- iOS设备(需要在真实设备上测试通知)
- 配备最新Xcode的mac电脑
步骤
1. 在PInfo.list中配置端点
对于初始设置,如果您从D·engage支持团队获得了URL地址,请使用Info.plist
文件进行设置。否则,您无需向Info.plist
文件中添加任何内容。以下是Info.plist
文件中的键截图。
注意:请参阅数据中心文档中的API端点。链接
2. 添加必需的功能
在Xcode中,选择根项目并选择主应用目标。在Signing & Capabilities
中,选择All
并选择+ Capability
。添加“推送通知”和Background Modes
。请确保勾选Remote Notifications
。
3. 添加通知服务扩展(仅在使用富通知时需要)
DengageNotificationServiceExtension
允许您的应用接收带有图片和/或按钮的富通知,并报告用户收到的通知分析。
3.1 在Xcode中选择File
> New
> Target
3.2 选择Notification Service Extension
然后按Next
3.3 输入产品名称为DengageNotificationServiceExtension
然后按Finish
注意:不要按下对话框中的“激活”。
3.4 取消激活方案提示
注意:通过取消激活,您可以让Xcode调试您的应用,而不是只调试扩展。如果意外激活,您可以在Xcode中随时切换回来调试应用(位于播放按钮旁边)。
3.5 在Project Navigator
中,选择顶级项目目录并在project and targets list
中选择DengageNotificationServiceExtension
目标。确保Deployment Target
设置为iOS 10
以获得最大平台兼容性。
3.6 完成通知服务扩展设置
如果您没有使用Cocoapods
,请遵循这些步骤。
注意:非Cocoapods步骤尚待确定。
否则,请继续以下设置:
- 在您的
Project Root
>iOS
>Podfile
中,在主目标之外添加通知服务扩展(应与主目标处于同一级别):
target 'DengageNotificationServiceExtension' do
pod 'Dengage.Framework','~> 3.0.6'
end
关闭Xcode。仍然在ios
目录中,运行pod install
。
- 打开
xcworkspace
文件在Xcode中。在DengageNotificationServiceExtension directory
>NotificationService.swift
文件中,替换整个文件内容为以下代码:
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
// 添加这一行代码
Dengage.didReceiveNotificationExtentionRequest(receivedRequest: request, with: bestAttemptContent)
contentHandler(bestAttemptContent)
}
}
忽略此时可能出现的构建错误,我们稍后将通过导入D·engage库解决这些问题。
4. 设置Dengage SDK(包括iOS原生SDK的两个步骤:1. 设置集成密钥 2. 初始化)
集成密钥
是在定义应用时由CDMP平台生成的。它是一个包含有关应用信息的哈希字符串。
在您的应用周期开始时,必须设置集成密钥并在初始化时立即调用。以下示例展示了如何在您的AppDelegate.swift
文件中完成此操作:
import UIKit
import Flutter
import dengage_flutter // 添加此导入
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
/************* FLutter Setup Code Starts here ********************/
// 请注意此处的key是您在Dengage仪表板上注册iOS应用时收到的集成密钥。
let coordinator = DengageCoordinator.staticInstance;
coordinator.setupDengage(key: "K8sbLq1mShD52Hu2ZoHyb3tvDE_s_l_h99xFTF60WiNPdHhJtvmOqekutthtzRIPiMTbAa3y_p_l_PZqpon8nanH8YnJ8yYKocDb4GCAp7kOsi5qv7mDR_p_l_qOFLLp9_p_l_lloC6ds97X", launchOptions: launchOptions as NSDictionary?);
/************* FLutter Setup Code Ends here ********************/
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
override func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let coordinator = DengageCoordinator.staticInstance;
coordinator.registerForPushToken(deviceToken:deviceToken)
}
}
5. 使用设备令牌注册远程通知
要使用设备令牌注册远程通知,请在您的AppDelegate.swift
文件中添加以下方法和代码:
import UIKit
import Flutter
import dengage_flutter // 添加此导入
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
// ... 其他代码 ...
/**************** 这里覆盖此方法 *****************/
override func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let coordinator = DengageCoordinator.staticInstance;
coordinator.registerForPushToken(deviceToken:deviceToken)
}
}
Android特定额外步骤
Firebase SDK设置(仅当您使用Firebase进行推送时,请遵循这些步骤,对于华为,请遵循这些步骤)
要求
- Google Firebase应用配置
- Android Studio
- Android设备或模拟器
D·engage Android SDK提供了处理推送通知消息的接口。可选地,它还提供了发送事件的功能,如打开和订阅到DEngage平台。
支持Android API级别4.1.x及以上版本。
对于详细的Firebase SDK设置及其与D·engage的集成,请点击 这里。
华为SDK设置(注意:仅当您使用华为消息服务进行推送时,请遵循这些步骤,如果使用Firebase,请遵循这些步骤)
要求
- 华为开发者账户
- Java JDK安装包
- Android SDK包
- Android Studio 3.X
- HMS Core (APK) 4.X或更高版本
- 华为设备或华为云调试
支持Android API级别4.4或更高版本。(注意:华为AdID服务要求最低目标SDK版本为19)
D·engage华为SDK 提供了一个接口,用于处理通过华为消息服务(HMS)
交付的推送通知消息。它类似于Firebase,但配置过程略有不同,包含了此处提到的步骤。
创建DengageManager实例
首先,您需要在主或启动活动中创建DengageManager实例。
// 导入语句
import com.example.dengage_flutter.DengageCoordinator;
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 下面这行需要添加
DengageCoordinator.sharedInstance.setupDengage(
true,
"FEYl27JxJfay6TxiYCdlkP2FXeuhNfEoI8WkxI_p_l__s_l_5sLbzKmc9c88mSZxRCrLuqMK4y0e8nHajQnBt8poBNDMvNtIytYKZ6byBQZOE8kqkkgDnlye2Lb5AcW3tuIWQjYz",
"your-huawei-key-here",
applicationContext
)
}
完成这些步骤后,您将能够向您的应用发送推送通知消息。
更改订阅API端点
您可以通过在YourProject/android/src/main/AndroidManifest.xml
中添加以下元数据标签来更改订阅API端点:
// for prod
<meta-data
android:name="den_push_api_url"
android:value="https://push.dengage.com" />
// for dev
<!-- android:value="https://pushdev.dengage.com" /-->
注意:请参阅数据中心文档以设置您的订阅端点。
更改事件API端点
类似于订阅端点,您可以通过在YourProject/android/src/main/AndroidManifest.xml
中设置以下元数据标签来更改事件API端点:
// for prod
<meta-data
android:name="den_event_api_url"
android:value="https://event.dengage.com" />
// for dev
<!-- android:value="https://eventdev.dengage.com" /-->
注意:请参阅数据中心文档以设置您的事件端点。
现在您可以像这里提到的那样设置ContactKey。
支持的版本
iOS
D·engage移动SDK支持iOS 10及更高版本。
Android
D·engage移动SDK支持Android 4.4(API级别19)及更高版本。
华为
D·engage移动SDK支持所有新版本。
使用
订阅
订阅是一个过程,触发将订阅事件发送到D·engage。它包含发送推送通知给客户端所需的所有信息。
订阅由D·engage SDK自动管理,订阅周期从提示用户权限开始。SDK将在以下情况下自动发送订阅事件:
- 初始化
- 设置联系人键
- 设置令牌
- 设置用户权限(如果您手动管理权限)
请求用户通知权限
注意:Android不需要显式请求推送通知权限。因此,您只能在iOS上请求推送通知的权限。
iOS在请求用户发送通知时使用共享的UNUserNotificationCenter
。D·engage SDK管理器也使用UNUserNotificationCenter
来请求权限。Apple文档参考
如果您想在应用中明确获取用户通知权限,可以调用以下方法之一:
// 在顶部导入
import 'package:dengage_flutter/dengage_flutter.dart';
// 在JavaScript/TypeScript代码中某处
DengageFlutter.promptForPushNotifications()
或者
// 在顶部导入
import 'package:dengage_flutter/dengage_flutter.dart';
// 在JavaScript/TypeScript代码中某处
Object result = await DengageFlutter.promptForPushNotificationsWitCallback()
设置联系人键
联系人键表示系统中的用户ID。有两类设备:匿名设备和联系人设备。联系人设备包含联系人键。
要通过其联系人跟踪设备,您需要在SDK中设置联系人键。
注意:建议在拥有用户信息时调用此方法。您应该在每次应用打开和登录、注销页面时调用。
// 导入语句
import 'package:dengage_flutter/dengage_flutter.dart';
// 在js/ts代码中
Object result = await DengageFlutter.setContactKey(userId: String)
// 如果您需要从SDK获取当前联系人键,可以使用getContactKey
Object result = await DengageFlutter.getContactKey()
手动管理令牌
如果您需要获取当前令牌或手动管理令牌订阅过程,可以使用setToken和getToken函数。
// 在顶部导入
import 'package:dengage_flutter/dengage_flutter.dart';
// 在JavaScript/TypeScript代码中某处
Object result = await DengageFlutter.getToken()
// 手动设置令牌
DengageFlutter.setToken(token)
用户权限管理(可选)
如果您在应用中自行管理用户权限状态,可以使用setUserPermission
方法发送用户权限。
// 在顶部导入
import 'package:dengage_flutter/dengage_flutter.dart';
// 在JavaScript/TypeScript代码中某处
DengageFlutter.setUserPermission(true)
// 获取用户上次设置的权限
Object result = await DengageFlutter.getUserPermission(true)
日志记录
SDK可以提供日志以供调试。它会显示发送到REST API的查询和有效负载。
要验证您的输入,可以通过以下方法启用SDK的日志。
// isVisible是一个布尔值,默认情况下isVisible设置为false。
DengageFlutter.setLogStatus(isVisible)
处理通知点击事件
SDK提供了一个监听器,如果您想手动获取和解析点击推送通知时的负载,可以使用onNotificationClicked
事件。
// 声明为类级静态变量
static const EventChannel eventChannel = EventChannel("com.dengage.flutter/onNotificationClicked");
@override
void initState() {
// 其余代码在这里...
eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError);
super.initState();
}
void _onEvent(Object event) {
print("in on Event object is: ");
print(event);
}
void _onError(Object error) {
print("in on Error Object is: ");
print(error);
}
深度链接
SDK支持URL模式深度链接。如果目标URL有有效的链接,它将重定向到相关链接。
丰富通知
丰富通知是一种支持图像、GIF、视频内容的通知类型。D·engage SDK支持多种内容类型并处理通知。
丰富通知支持以下媒体类型:
- 图像
- 视频
- GIF
有关丰富通知及其在iOS侧设置的详细信息,请参阅 此链接。
注意:在Android上,丰富通知不需要特殊设置。
轮播推送
轮播推送是一种具有不同于丰富通知的不同UI的通知类型。SDK将处理通知负载并在为轮播推送时显示UI。轮播推送功能允许您以幻灯片形式显示通知。
iOS
要求
- iOS 10或更高版本
- 通知服务扩展
- 通知内容扩展
- Dengage.Framework.Extensions
要在iOS上设置轮播推送,请遵循 此链接。
Android
要求
- Android SDK 2.0.0+
要在Android上设置轮播推送,请遵循 此链接。
操作按钮
Android SDK允许您在通知下方放置可点击的按钮。操作按钮支持Android SDK 2.0.0+。
有关操作按钮的进一步设置,请遵循 此链接。
事件收集
为了收集Android移动事件并将该数据用于在D·engage中创建行为分段,您需要确定需要收集的事件类型和数据。一旦确定了这一点,您需要在D·engage中创建一个“大数据”表。收集的事件将存储在这个表中。根据您的具体需求可以定义多个表。
可以收集任何类型的事件。事件的内容和结构完全灵活,可以根据独特的业务需求进行更改。您只需要为事件定义一个表。
定义之后,您所要做的就是将事件数据发送到这些表。D·engage SDK只有两个发送事件的函数:sendDeviceEvent
和 sendCustomEvent
。大多数情况下,您只需使用sendDeviceEvent
函数。
登录/登出动作
如果用户登录或您有用户信息,这意味着您有该用户的联系键。您可以通过设置联系键来匹配用户与浏览器。有两个函数用于获取和设置联系键。
1.a 设置联系键
如果用户已登录,请设置用户ID。这对于识别用户非常重要。您可以在每个页面上调用此函数。它不会发送不必要的事件。
// 在导入部分
import 'package:dengage_flutter/dengage_flutter.dart';
// 在代码中,需要用户信息的地方
Object result = await DengageFlutter.setContactKey(userId: String)
1.b 获取联系键
要从SDK获取当前用户信息,可以使用getContactKey方法。
// 在导入部分
import 'package:dengage_flutter/dengage_flutter.dart';
// 在代码中,需要用户信息的地方
Object result = await DengageFlutter.getContactKey()
2. 事件收集
如果您的D·engage帐户是电子商务帐户,您应该在SDK中使用标准电子商务事件。如果您需要自定义事件或帐户不是标准电子商务帐户,则应使用自定义事件函数。
2.1 电子商务帐户事件
在D·engage SDK中有一些标准的电子商务事件。
页面浏览事件
- 首页浏览
- 商品页面浏览
- 类别页面浏览
- 促销页面浏览
购物车事件
- 添加到购物车
- 从购物车移除
- 查看购物车
- 开始结账
订单事件
- 下单
- 取消订单
愿望清单事件
- 添加到愿望清单
- 从愿望清单移除
搜索事件
页面浏览事件
// 在导入部分
import 'package:dengage_flutter/dengage_flutter.dart';
// 首页浏览
DengageFlutter.pageView({
"page_type":"home",
"page_title": "home",
"app_type": "Mobile",
"page_url": ""
// ... extra columns in page_view_events table, can be added here
});
// 类别页面浏览
DengageFlutter.pageView({
"page_type":"category",
"category_id":"1",
"page_title": "",
"app_type": "Mobile",
"page_url": ""
// ... extra columns in page_view_events table, can be added here
})
// 商品页面浏览
DengageFlutter.pageView({
"page_type":"product",
"product_id":"1",
"page_title": "",
"app_type": "Mobile",
"page_url": ""
// ... extra columns in page_view_events table, can be added here
})
// 促销页面浏览
DengageFlutter.pageView({
"page_type":"promotion",
"promotion_id":"1",
"page_title": "",
"app_type": "Mobile",
"page_url": ""
// ... extra columns in page_view_events table, can be added here
})
// 自定义页面浏览
DengageFlutter.pageView({
"page_type":"custom"
"page_title": "custom",
"app_type": "Mobile",
"page_url": ""
// ... extra columns in page_view_events table, can be added here
})
// 对于其他页面,您可以发送任何作为page_type
购物车事件
// 在导入部分
import 'package:dengage_flutter/dengage_flutter.dart';
// 当前购物车中的所有商品必须添加到数组
const cartItem = {}, // cartItem 将是一个具有 key:value 类型的对象
cartItem["product_id"] = 1
cartItem["product_variant_id"] = 1
cartItem["quantity"] = 1
cartItem["unit_price"] = 10.00
cartItem["discounted_price"] = 9.99
// ... extra columns in shopping_cart_events_detail table, can be added in cartItem
let cartItems = []
cartItems.push(cartItem)
cartItems.push(cartItem2)
// 添加到购物车操作
const addParams = {
"product_id":1,
"product_variant_id":1,
"quantity":1,
"unit_price":10.00,
"discounted_price":9.99,
// ... extra columns in shopping_cart_events table, can be added here
"cartItems":cartItems // 所有购物车中的商品
}
DengageFlutter.addToCart(addParams)
// 移除购物车操作
const removeParams = {
"product_id":1,
"product_variant_id":1,
"quantity":1,
"unit_price":10.00,
"discounted_price":9.99,
// ... extra columns in shopping_cart_events table, can be added here
"cartItems":cartItems // 所有购物车中的商品
}
DengageFlutter.removeFromCart(removeParams)
// 查看购物车操作
const viewParams = {
// ... extra columns in shopping_cart_events table, can be added here
"cartItems":cartItems
}
DengageFlutter.viewCart(viewParams)
// 开始结账操作
var checkoutParams = {
// ... extra columns in shopping_cart_events table, can be added here
"cartItems":cartItems
}
DengageFlutter.beginCheckout(checkoutParams)
订单事件
// 在导入部分
import 'package:dengage_flutter/dengage_flutter.dart';
// 购买的商品或取消的商品必须添加到数组
const cartItem = {}
cartItem["product_id"] = 1
cartItem["product_variant_id"] = 1
cartItem["quantity"] = 1
cartItem["unit_price"] = 10.00
cartItem["discounted_price"] = 9.99
// ... extra columns in order_events_detail table, can be added in cartItem
const cartItems = []
cartItems.push(cartItem)
cartItems.push(cartItem2)
// ... 购买的商品或取消的商品必须添加
// 下单操作
const placeOrderParams = {
"order_id":1,
"item_count":1, // 总购买商品数量
"total_amount":1, // 总价格
"discounted_price":9.99, // 如果没有折扣,使用总价
"payment_method":"card",
"shipping":5,
"coupon_code":"",
// ... extra columns in order_events table, can be added here
"cartItems":cartItems // 购买的商品
}
DengageFlutter.placeOrder(placeOrderParams)
// 取消订单操作
const cancelParams = {
"order_id":1, // 取消订单ID
"item_count":1, // 取消总商品数量
"total_amount":1, // 取消商品的总价格
"discounted_price":9.99, // 如果没有折扣,使用总价
// ... extra columns in order_events table, can be added here
"cartItems":cartItems // 取消的商品
}
DengageFlutter.cancelOrder(cancelParams)
愿望清单事件
// 在导入部分
import 'package:dengage_flutter/dengage_flutter.dart';
// 当前愿望清单中的商品
const wishListItem = {}
wishListItem["product_id"] = 1
const wishListItems = []
wishListItems.push(wishListItem)
// 添加到愿望清单操作
const params = [
"product_id": 1,
// ... extra columns in wishlist_events table, can be added here
"items": wishlistItems // 当前愿望清单中的商品
]
DengageFlutter.addToWishList(params)
// 从愿望清单移除操作
const removeParams = [
"product_id": 1,
// ... extra columns in wishlist_events table, can be added here
"items": wishlistItems // 当前愿望清单中的商品
]
DengageFlutter.removeFromWishList(removeParams)
搜索事件
const params = {
"keywords":"some product name", // 搜索框中的文本
"result_count":12,
"filters":"" // 您可以发送用户在此处选择的额外过滤条件。格式未指定
// ... extra columns in search_events table, can be added here
}
DengageFlutter.search(params)
自定义事件
您可以使用sendDeviceEvent
函数发送针对设备的事件。事件将发送到您在D·engage帐户中定义的大数据表。该表必须与master_device
表相关联。如果您为此设备设置了contact_key
,收集的事件将与此用户关联。
// 例如,如果您有一个名为"events"的表
// 且events表有"key", "event_date", "event_name", "product_id"列
// 您只需要发送除"key"和"event_date"以外的列,因为这些列由SDK发送
// 方法签名 => dengage(‘sendDeviceEvent’, tableName: String, dataObject, callback);
Map data = new HashMap<String, dynamic>();
data["name"] = "Kamran Younis";
await DengageFlutter.sendDeviceEvent("tableName", data);
应用内收件箱
应用内收件箱是移动应用内的一个屏幕,用于存储持久消息。有点像是电子邮件收件箱,但它存在于应用内部。应用内收件箱与其他移动渠道(如推送通知或应用内消息)不同。对于推送和应用内消息,一旦打开它们就会消失。
换句话说,D·engage管理面板允许您将选定的消息保留在平台上,而移动SDK可能会在需要时检索并显示这些消息。
为了将消息保存到应用内收件箱,您需要在D·engage管理面板中发送消息时选择“保存到收件箱”选项并分配过期日期。
收件箱消息将保存在手机的内存存储中,直到应用完全关闭或一段时间,并且D·engage SDK提供了获取和管理这些消息的方法。
要求
- Android: D·engage SDK 3.2.3+
- iOS: D·engage SDK 2.5.21+
方法
有三种方法来管理应用内收件箱消息
- 从服务器获取应用内收件箱消息
Map<String, dynamic> result = await DengageFlutter.getInboxMessages(offset, limit).catch(err => err)
// 其中offset: Int, limit: Int = 20
// inboxMessages 现在要么有一个应用内收件箱消息数组,要么是一个错误。
- 删除收件箱中的特定消息
Object result = await DengageFlutter.deleteInboxMessage(id).catch(err => err)
// 其中id: String
// delMsgResponse 现在要么有一个{success: true, id: "id-of-msg-deleted"}对象,要么是一个错误
- 将特定消息标记为已点击
Object result = await DengageFlutter.setInboxMessageAsClicked(id).catch(err => err)
// 其中id: String &
// msgSetAsClicked 现在要么有一个{success: true, id: "id-of-msg-deleted"}对象,要么是一个错误
应用内消息
应用内消息是一种在应用内部显示的通知类型。它不会在特定时间发送,而是会在用户使用应用时显示。例如,弹出窗口、是/否提示、横幅等。为了显示应用内消息,无需任何权限要求。
要求
- iOS: D·engage SDK 3.2.3+
- Android: D·engage SDK 3.2.3+
方法
创建的消息将存储在D·engage后端,并提供给移动SDK。如果您正确集成了移动SDK以处理推送消息,那么只需在每页导航时添加setNavigtion函数即可使用应用内功能。如果您想使用屏幕名称过滤器,应该在每页导航时将屏幕名称发送给setNavigation函数。
简单的应用内消息
DengageFlutter.setNavigation()
使用屏幕名称的应用内消息
DengageFlutter.setNavigation('cart')
使用屏幕名称和页面数据的应用内消息
// (即将推出)
// 预计发布日期:2021年4月
// 如果您有额外信息
// 您可以将其发送到使用屏幕数据过滤器。
Object screenData = {productId: "~hs7674", price: 1200}
DengageFlutter.setNavigation('product', screenData)
更多关于Flutter用户互动与推送管理插件dengage_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter用户互动与推送管理插件dengage_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 dengage_flutter
插件进行用户互动与推送管理的代码案例。这个插件通常用于在 Flutter 应用中实现推送通知和用户互动功能。
首先,确保你已经在 pubspec.yaml
文件中添加了 dengage_flutter
依赖:
dependencies:
flutter:
sdk: flutter
dengage_flutter: ^最新版本号 # 请替换为实际的最新版本号
然后,运行 flutter pub get
以获取依赖。
接下来,在你的 Flutter 应用中实现以下步骤:
1. 初始化 Dengage Flutter
在你的主应用文件(通常是 main.dart
)中,初始化 Dengage Flutter 插件。
import 'package:flutter/material.dart';
import 'package:dengage_flutter/dengage_flutter.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
DengageFlutter.initialize(
appId: '你的Dengage应用ID', // 替换为你的实际Dengage应用ID
appKey: '你的Dengage应用密钥', // 替换为你的实际Dengage应用密钥
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Dengage Flutter Demo'),
),
body: Center(
child: Text('Hello, Dengage Flutter!'),
),
);
}
}
2. 处理推送通知
为了处理推送通知,你需要监听 Dengage 插件提供的通知事件。在你的主应用文件中添加以下代码:
import 'dart:async';
// ... 其他导入 ...
class _MyHomePageState extends State<MyHomePage> {
// ... 其他代码 ...
@override
void initState() {
super.initState();
// 监听推送通知事件
DengageFlutter.onNotificationReceived.listen((notification) {
print('Received notification: $notification');
// 在这里处理接收到的通知,例如显示本地通知或更新UI
});
DengageFlutter.onNotificationOpened.listen((openedNotification) {
print('Opened notification: $openedNotification');
// 在这里处理用户点击通知后的逻辑
});
}
@override
void dispose() {
// 取消监听事件,以避免内存泄漏
DengageFlutter.onNotificationReceived.cancel();
DengageFlutter.onNotificationOpened.cancel();
super.dispose();
}
// ... 其他代码 ...
}
3. 发送用户互动事件
你可以使用 Dengage Flutter 插件发送用户互动事件,以便在 Dengage 控制台中跟踪和分析。
void _sendUserEvent() {
Map<String, dynamic> eventData = {
'event_name': 'user_login', // 事件名称
'user_id': '用户ID', // 用户ID(可选)
'properties': { // 事件属性(可选)
'login_time': DateTime.now().toIso8601String(),
'device_type': 'mobile',
},
};
DengageFlutter.trackEvent(eventData).then((response) {
print('Event tracked: $response');
}).catchError((error) {
print('Error tracking event: $error');
});
}
你可以将 _sendUserEvent
方法绑定到一个按钮点击事件或其他用户交互中,以便在用户执行特定操作时发送事件。
4. 配置本地通知(可选)
为了显示本地通知,你可能还需要配置本地通知插件,如 flutter_local_notifications
。这里是一个简单的配置示例:
dependencies:
flutter_local_notifications: ^最新版本号 # 请替换为实际的最新版本号
然后,在代码中配置和使用本地通知:
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
// ... 其他导入 ...
class _MyHomePageState extends State<MyHomePage> {
final FlutterLocalNotificationsPlugin _notificationsPlugin =
FlutterLocalNotificationsPlugin();
// ... 其他代码 ...
@override
void initState() {
super.initState();
// 配置本地通知
var initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/ic_launcher');
var initializationSettingsIOS = IOSInitializationSettings(
requestAlertPermission: true,
requestBadgePermission: true,
requestSoundPermission: true,
);
var initializationSettings = InitializationSettings(
android: initializationSettingsAndroid,
iOS: initializationSettingsIOS,
);
_notificationsPlugin.initialize(initializationSettings,
onSelectNotification: (String payload) async {
// 处理用户点击通知的逻辑
print('Notification payload: $payload');
});
// ... 其他代码 ...
}
void _showLocalNotification() {
var androidPlatformChannelSpecifics = AndroidNotificationDetails(
'your_channel_id',
'Your Channel Name',
'Your Channel Description',
importance: Importance.max,
priority: Priority.high,
);
var iOSPlatformChannelSpecifics = IOSNotificationDetails();
var platformChannelSpecifics = NotificationDetails(
android: androidPlatformChannelSpecifics,
iOS: iOSPlatformChannelSpecifics,
);
_notificationsPlugin.show(
0,
'Hello',
'This is a local notification!',
platformChannelSpecifics,
payload: 'item x',
);
}
// ... 其他代码 ...
}
你可以在接收到 Dengage 推送通知时调用 _showLocalNotification
方法来显示本地通知。
以上代码展示了如何在 Flutter 应用中使用 dengage_flutter
插件进行用户互动与推送管理。请根据你的实际需求调整代码。