使用推送通知支持再参与跟踪
Singular 支持推送通知跟踪,以加强再参与测量。通过将 Firebase Cloud Messaging (FCM) 与 Singular SDK 集成,您可以跟踪与推送通知互动的用户,并对其进行相应的归属。
为确保准确跟踪,请遵循以下实施指南,并确保将通知数据正确传递给 Singular SDK。
为什么推送通知跟踪很重要?
推送通知是一种关键的再参与工具,但要对其进行跟踪,需要正确的集成。Singular 可确保与通知互动的用户正确归属,帮助优化营销活动和互动策略。
实施指南
步骤 1:在 Flutter 中设置 Firebase 推送通知
首先,将 Firebase 集成到 Flutter 应用程序中以处理推送通知。请按照以下步骤操作:
-
添加依赖关系将所需软件包添加到pubspec.yaml
dependencies: firebase_core: ^2.24.2 firebase_messaging: ^14.7.10
-
配置 Firebase
- Android: 将google-services.json 放入android/app/ 并更新 Gradle 文件(参见 )。
- iOS: 将GoogleService-Info.plist 放入 Xcode Runner 文件夹,并使用 Firebase pod 更新Podfile 。
-
在 Flutter 中初始化 Firebase更新您的main.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 代码:
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 代码和一些本地配置。
提供推送有效载荷
-
Android
-
背景:在 AndroidMainActivity 中,覆盖onNewIntent ,将意图传递给 Singular:
// 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 桥接层自动处理,无需额外代码。
-
背景:在 AndroidMainActivity 中,覆盖onNewIntent ,将意图传递给 Singular:
-
iOS
-
后台:处理后台通知时,在 Dart 代码中调用 handlePushNotification:
void _processNotificationForSingular( String title, String body, Map<String, dynamic> data) { Singular.handlePushNotification(data); }
-
已终止:更新AppDelegate.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) } }
-
后台:处理后台通知时,在 Dart 代码中调用 handlePushNotification:
在 Singular 配置中设置推送链接路径
配置 Singular SDK 以识别通知有效载荷中的特定路径,从而实现重新参与归因:
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());
}
验证指南
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¤t_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 跟踪推送通知互动。这有助于提高活动性能洞察力,并确保准确的再参与归因。