支持推送通知

文件

使用推送通知支持再参与跟踪

Singular 支持推送通知跟踪,以加强再参与测量。通过将 Firebase Cloud Messaging (FCM) 与 Singular SDK 集成,您可以跟踪与推送通知互动的用户,并对其进行相应的归属。

为确保准确跟踪,请遵循以下实施指南,并确保将通知数据正确传递给 Singular SDK。

为什么推送通知跟踪很重要?

推送通知是一种关键的再参与工具,但要对其进行跟踪,需要正确的集成。Singular 可确保与通知互动的用户正确归属,帮助优化营销活动和互动策略。


实施指南

步骤 1:在 Flutter 中设置 Firebase 推送通知

首先,将 Firebase 集成到 Flutter 应用程序中以处理推送通知。请按照以下步骤操作:

  1. 添加依赖关系将所需软件包添加到pubspec.yaml
    yaml
    dependencies:
      firebase_core: ^2.24.2
      firebase_messaging: ^14.7.10
  2. 配置 Firebase
    • Android:google-services.json 放入android/app/ 并更新 Gradle 文件(参见 )。
    • iOS:GoogleService-Info.plist 放入 Xcode Runner 文件夹,并使用 Firebase pod 更新Podfile
  3. 在 Flutter 中初始化 Firebase更新您的main.dart:
    dart
    import 'package:firebase_core/firebase_core.dart';
    import 'package:firebase_messaging/firebase_messaging.dart';
    
    Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
      await Firebase.initializeApp();
      print("Background message: ${message.messageId}");
    }
    
    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await Firebase.initializeApp();
      FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
      runApp(MyApp());
    }

步骤 2:在 Flutter 中处理推送通知

当您的应用程序收到来自 Firebase 的推送通知时,您需要捕获通知数据并为 Singular 做好准备。下面介绍如何在不同的应用程序状态下处理通知:

安卓

  • 前台:直接在 Dart 中处理通知。
  • 后台/终止:与原生 Android 层交互。

更新您的 Dart 代码:

dart
class _MyAppState extends State<MyApp> {
  final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;

  @override
  void initState() {
    super.initState();

    // Request permission

    _firebaseMessaging.requestPermission();

    // Foreground notifications

    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      print('Foreground message: ${message.messageId}');
      String title = message.notification?.title ?? '';
      String body = message.notification?.body ?? '';
      Map<String, dynamic> data = message.data;

      // Process notification for Singular (foreground)

      _processNotificationForSingular(title, body, data);
    });

    // Background/Opened from notification

    FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
      print('Message opened: ${message.messageId}');
      _processNotificationForSingular(
        message.notification?.title ?? '',
        message.notification?.body ?? '',
        message.data,
      );
    });
  }

  void _processNotificationForSingular(
      String title, String body, Map<String, dynamic> data) {
    print('Notification - Title: $title, Body: $body, Data: $data');
    // Add Singular handling here (Step 3)

  }
}

iOS

  • 前景:与 Android 类似,在 Dart 中处理。
  • 背景/终止:需要本地 iOS 集成。

第 3 步:将推送通知与 Singular SDK 相结合

为确保 Singular 跟踪推送通知的参与情况以进行归因,需要将通知有效载荷传递给 Singular SDK。这涉及到 Dart 代码和一些本地配置。

提供推送有效载荷

  1. Android
    • 背景:在 AndroidMainActivity 中,覆盖onNewIntent ,将意图传递给 Singular:
      kotlin
      // MainActivity.kt
      
      package com.example.yourapp
      
      import io.flutter.embedding.android.FlutterActivity
      import android.content.Intent
      import com.singular.sdk.SingularBridge
      
      class MainActivity: FlutterActivity() {
          override fun onNewIntent(intent: Intent) {
              super.onNewIntent(intent)
              SingularBridge.onNewIntent(intent)
          }
      }
    • 已终止:由 Singular 桥接层自动处理,无需额外代码。
  2. iOS
    • 后台:处理后台通知时,在 Dart 代码中调用 handlePushNotification:
      dart
      void _processNotificationForSingular(
          String title, String body, Map<String, dynamic> data) {
        Singular.handlePushNotification(data);
      }
    • 已终止:更新AppDelegate.swift 以处理启动选项:
      swift
      import UIKit
      import Singular
      
      @UIApplicationMain
      @objc class AppDelegate: FlutterAppDelegate {
        override func application(
          _ application: UIApplication,
          didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
        ) -> Bool {
          SingularAppDelegate.shared().launchOptions = launchOptions
          return super.application(application, didFinishLaunchingWithOptions: launchOptions)
        }
      }

在 Singular 配置中设置推送链接路径

配置 Singular SDK 以识别通知有效载荷中的特定路径,从而实现重新参与归因:

dart
import 'package:singular_flutter_sdk/singular.dart'; // Adjust import


void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();

  // Singular configuration

  SingularConfig config = SingularConfig(
    apiKey: 'your_api_key',
    secret: 'your_secret',
  );

  // Set push notification link paths (same for iOS and Android)

  config.pushNotificationsLinkPaths = [
    ['sng_link'],
    ['rootObj', 'nestedObj', 'anotherNested', 'singularLink'],
  ];

  // Initialize Singular

  Singular.init(config);

  runApp(MyApp());
}

验证指南

第 4 步:在启动会话调用中验证/确认推送通知接收情况

Singular SDK API 调用可确保推送通知有效载荷链接在启动会话调用中的singular_link保留参数下正确传递。

举例说明

https://sdk-api-v1.singular.net/api/v1/start?a=<SDK-Key>&ab=arm64-v8a&aifa=180f63a1-0955-47b4-896a-d75ae3d35955&apc=Marchv7&apg=1&aps=Intex&asid_scope=1&asid_timeinterval=0.112&av=20.0&br=samsung&c=wifi&current_device_time=1740905574088&de=m15x&device_type=phone&device_user_agent=Dalvik/2.1.0 (Linux; U; Android 14; SM-E156B Build/UP1A.231005.007)&dnt=0&event_index=3&fi=e5bRZuVddO8:APA91bHXI3OmFZv3-r8f03zyji2kvKWbIngwf8KBDHk4Rj5q5MEeEm6EtzC-if1vpJRmuYLyGdAcSz9-nc49eIjD86xwj-n9J4jKucqMVt9mP8ICifP0arA&i=net.singular.singularsampleapp&install_time=1740905507036&is=false&k=SDID&lag=0.067&lc=en_IN&ma=samsung&mo=SM-E156B&n=Singular-TestApp-Debug&p=Android&pr=m15xnndins&pu=1&rt=json&s=1740905574084&sdk=Singular/v12.6.2&singular_install_id=2dc5dfc2-a2a8-484a-aad1-fed6cb7a3023&singular_link=https://singularassist2.sng.link/C4nw9/r1m0?_dl=singular://test&_smtype=3&src=com.android.shell&u=75f7b911-5a77-597d-8892-56f5e0e210ff&update_time=1740905507036&v=14&h=1e723fd90344d5d037059f110611ed1d84fbba88


您也可以使用Singular SDK 控制台来验证Deeplink URL 下的推送通知跟踪链接,如下所示。

通过验证,您可以确认 Singular SDK 正确跟踪了推送通知的参与情况。

注意:

  • 请注意,与singularLinksHandler代码不同的是,Singular SDK 不为该功能提供推送有效载荷回调。应用程序开发人员有责任读取推送通知数据并实现深度链接逻辑,将用户重定向到应用程序中的特定产品页面。在此解决方案中,Singular 会在用户点击通知时检索推送通知有效载荷,并将此有效载荷包含在由Singular.start(config)触发的 SDK 启动会话事件中然后,Singular 后端将对这些数据进行处理,以确定推送通知触摸点/点击的属性,并将其注册用于重新参与跟踪。
  • 我们有一套安全机制,只允许推送通知有效载荷中传递的自定义键值对中的Singular 链接域。具体来说,只允许使用 "奇异管理链接 "页面中预定义的sng.link 域。

    例如
    https://prod_test.sng.link/B0s2a/51oi?_dl=singular%3A%2F%2Fmain

    如果要在不同的域(如电子邮件服务提供商的ESP 域)中封装Singular 链接,则必须在设置中添加以下选项,明确配置域:请参考以下配置示例。config.withESPDomains(Arrays.asList("sl.esp.link"));

  • 如果需要根据单个推送通知的用户操作触发不同的深层链接,可以使用单个 Singular 跟踪链接并动态修改重定向。

    示例

    突发新闻推送通知可能会提供多个深层链接选项!与其创建多个跟踪链接,不如配置一个 Singular 跟踪链接,并根据用户选择动态调整重定向

    阅读最新新闻
    newsapp://article?id=12345
    热门话题
    newsapp://trending
    体育
    newsapp://sports


    了解有关在奇异跟踪链接中覆盖重定向的更多信息

成功!

通过这些步骤,您的应用程序现在已设置为使用 Singular 跟踪推送通知互动。这有助于提高活动性能洞察力,并确保准确的再参与归因。