Flutter用户互动与推送管理插件dengage_flutter的使用

发布于 1周前 作者 yuanlaile 来自 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文件中的键截图。

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.2截图

3.3 输入产品名称为DengageNotificationServiceExtension然后按Finish

注意:不要按下对话框中的“激活”。

步骤3.3截图

3.4 取消激活方案提示

步骤3.4截图

注意:通过取消激活,您可以让Xcode调试您的应用,而不是只调试扩展。如果意外激活,您可以在Xcode中随时切换回来调试应用(位于播放按钮旁边)。

3.5 在Project Navigator中,选择顶级项目目录并在project and targets list中选择DengageNotificationServiceExtension目标。确保Deployment Target设置为iOS 10以获得最大平台兼容性。

步骤3.5截图

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库解决这些问题。

NotificationService.swift截图

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只有两个发送事件的函数:sendDeviceEventsendCustomEvent。大多数情况下,您只需使用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+

方法

有三种方法来管理应用内收件箱消息

  1. 从服务器获取应用内收件箱消息
Map<String, dynamic> result = await DengageFlutter.getInboxMessages(offset, limit).catch(err => err)
// 其中offset: Int, limit: Int = 20
// inboxMessages 现在要么有一个应用内收件箱消息数组,要么是一个错误。
  1. 删除收件箱中的特定消息
Object result = await DengageFlutter.deleteInboxMessage(id).catch(err => err)
// 其中id: String
// delMsgResponse 现在要么有一个{success: true, id: "id-of-msg-deleted"}对象,要么是一个错误
  1. 将特定消息标记为已点击
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

1 回复

更多关于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 插件进行用户互动与推送管理。请根据你的实际需求调整代码。

回到顶部