推送通知营销活动测量
跟踪和测量 iOS 和 Android 上的推送通知活动性能,将重新参与事件归因于特定的推送活动,并优化用户保留策略。
Singular为Firebase Cloud Messaging(FCM)、Apple Push Notification Service(APN)以及CleverTap、MoEngage、WebEngage、OneSignal、Salesforce Marketing Cloud和Braze等第三方平台上的推送通知活动提供无缝跟踪。
推送通知跟踪的工作原理
Singular通过在通知有效载荷中嵌入跟踪链接来跟踪推送通知活动,并将应用程序的打开归因于发起的活动。
跟踪流程
- 创建营销活动:创建推送通知,并将Singular跟踪链接作为自定义键值/值数据嵌入其中
- 用户接收通知:推送提供商向用户设备发送通知
- 用户点击通知:用户点击通知打开应用
- SDK 处理有效载荷:Singular SDK 从通知有效载荷中提取跟踪数据
- 记录归因:Singular 将应用程序的打开归因于推送活动的再接触事件
再参与与获取:推送通知跟踪测量的是再参与(现有用户返回到您的应用程序),而不是新用户获取。跟踪链接必须配置为启用重新吸引。
支持的推送通知提供商
Singular支持所有主要推送提供商和营销自动化平台的推送通知跟踪。
平台支持矩阵
| 提供商 | 平台 | 集成类型 | Singular 支持 |
|---|---|---|---|
| Firebase 云消息 (FCM) | 安卓 | 自定义数据有效载荷 | ✔ |
| 苹果推送通知服务(APN) | 苹果 | 自定义数据有效载荷 | ✔ |
| CleverTap | iOS、安卓 | 自定义数据有效载荷 | ✔ |
| MoEngage | iOS、安卓 | 自定义数据有效载荷 | ✔ |
| WebEngage | iOS、安卓 | 自定义数据有效载荷 | ✔ |
| OneSignal | iOS、安卓 | 自定义数据或启动 URL | ✔ |
| 销售力营销云 (SFMC) | iOS、安卓 | 自定义数据或 OpenDirect | ✔ |
| Braze | iOS、安卓 | 自定义数据或点击行为 | ✔ |
集成灵活性:某些提供商(OneSignal、SFMC、Braze)支持通过 CTA 字段直接集成跟踪链接,无需自定义 SDK 配置。有关详情,请参阅替代集成方法。
前提条件
在实施推送通知跟踪之前,请确认您的应用程序符合这些要求。
所需设置
Singular SDK 集成
安装和配置 Singular SDK,并启用推送通知支持。
- 安卓 SDK:按照《Android SDK 集成指南》进行集成
- iOS SDK:按照《iOS SDK 集成指南》进行集成
- 推送支持:在 SDK 初始化过程中启用推送通知支持
推送通知基础架构
在应用程序和后台系统中配置推送通知交付。
- 安卓:使用有效的服务器密钥配置 Firebase Cloud Messaging
- iOS 系统:苹果开发者账户中配置的 APNs 证书或令牌
- 设备注册:应用程序成功注册推送通知并存储令牌
- 交付测试:验证推送通知是否成功到达设备
推送提供商帐户
设置和配置推送通知服务提供商。
- 提供商账户:FCM、APN 或第三方平台的活动账户
- 自定义数据支持:验证提供商是否支持有效载荷中的自定义键/值对
- API 访问:为以编程方式发送通知而配置的凭证
实施步骤
按照以下步骤使用 Singular 实施推送通知活动跟踪。
步骤 1:创建 Singular 跟踪链接
生成再参与链接
创建专门为推送通知活动的再参与跟踪配置的奇异链接。
- 导航至奇异链接:访问 Singular 面板中的 Singular 链接部分
- 创建新链接:单击 "创建新链接 "并选择您的应用程序
- 启用再参与:将 "再参与 "设置切换为启用(对于推送跟踪至关重要
- 配置参数:为归因添加营销活动参数(来源、媒介、营销活动名称
- 生成链接:保存并生成长短两种 URL 格式
完整指南:构建奇异跟踪链接
关键:跟踪链接必须启用再参与功能。未启用再参与功能的链接将无法正确归因于推送通知的打开。
链接配置示例:
再参与切换:
生成链接:
步骤 2:在推送通知有效载荷中添加链接
配置自定义数据
使用标准密钥名称将 Singular 跟踪链接嵌入推送通知的自定义数据部分。
配置要求:
-
键名:使用
sng_link作为自定义数据键(区分大小写 - 值:粘贴完整的 Singular 跟踪链接(短或长格式
- 数据类型:自定义数据有效载荷中的字符串值
Firebase 云消息示例
通过 Firebase 控制台或 API 向 FCM 通知添加自定义数据。
Firebase 控制台配置:
{
"notification": {
"title": "Special Offer Inside!",
"body": "Open now to claim your reward"
},
"data": {
"sng_link": "https://your-app.sng.link/Abc12/xyz9?pcn=push_campaign"
},
"to": "device_registration_token_here"
}
苹果推送通知服务示例
使用标准 aps 字典格式在 APNs 有效负载中包含自定义数据。
APNs 有效负载结构:
{
"aps": {
"alert": {
"title": "Special Offer Inside!",
"body": "Open now to claim your reward"
},
"sound": "default",
"badge": 1
},
"sng_link": "https://your-app.sng.link/Abc12/xyz9?pcn=push_campaign"
}
支持两种格式:Singular 既接受短链接(sng.link),也接受长链接(自定义域格式)。请使用适合您的跟踪基础设施的格式。
第 3 步:配置 SDK 以处理自定义密钥
安卓 SDK 配置
配置 Singular Android SDK,以便从 FCM 通知中提取和处理sng_link 自定义数据密钥。
// In your FirebaseMessagingService
override fun onMessageReceived(remoteMessage: RemoteMessage) {
super.onMessageReceived(remoteMessage)
// Extract custom data from notification
val data = remoteMessage.data
// Check for Singular tracking link
if (data.containsKey("sng_link")) {
val singularLink = data["sng_link"]
// Pass to Singular SDK for attribution
Singular.setGCMData(data)
}
// Display notification to user
showNotification(remoteMessage)
}
完整集成指南:支持安卓推送通知
iOS SDK 配置
配置 Singular iOS SDK,从 APNs 通知中提取并处理sng_link 自定义数据密钥。
// In your AppDelegate
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// Check for Singular tracking link
if let singularLink = userInfo["sng_link"] as? String {
// Pass to Singular SDK for attribution
Singular.setAPNSData(userInfo)
}
completionHandler(.newData)
}
// For iOS 10+ UNUserNotificationCenter
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
// Check for Singular tracking link
if let singularLink = userInfo["sng_link"] as? String {
// Pass to Singular SDK for attribution
Singular.setAPNSData(userInfo)
}
completionHandler()
}
完整集成指南:iOS 推送通知支持
第 4 步:测试和验证
测试程序
在启动营销活动之前,验证推送通知跟踪是否正常。
- 发送测试通知:使用自定义数据中的 Singular 链接触发测试推送通知
- 在设备上接收:确认通知出现在测试设备上
- 点击通知:点击通知打开应用程序
- 检查 SDK 日志:验证 SDK 日志是否显示奇异链接提取
- 验证仪表板:确认重新参与事件在 5 分钟内出现在 Singular 面板中
特定平台验证:
常见问题:
-
缺少事件:验证
sng_link关键名称是否准确(区分大小写 - 错误归属:确认跟踪链接已启用重新参与功能
- SDK 未处理:检查 SDK 是否在通知处理前初始化
步骤 5:监控营销活动性能
分析推送通知结果
在 Singular 的分析报告中跟踪推送通知活动的再参与性能和投资回报率。
可用指标:
- 再参与事件:推送通知导致的应用程序打开总数
- 再参与率:通过推送打开应用的用户百分比
- 收入归因:重新参与用户产生的收入
- 活动比较:不同推送活动的表现
- 群组分析:重新吸引后的用户行为
仪表板示例:
通过以下方式访问报告:分析 → 汇总分析报告 → 按重新吸引来源过滤
其他集成方法
某些推送提供商支持直接跟踪链接集成,无需在 SDK 中进行自定义数据配置。
直接 CTA 集成
某些平台允许在通知 CTA 字段中直接配置 Singular 跟踪链接,从而自动启动带有归因数据的应用程序。
OneSignal 启动 URL
OneSignal 通过启动 URL 功能支持直接跟踪链接。
- 配置:在通知组成器中的启动 URL 字段中添加 Singular 链接
- 行为:点击通知打开应用程序,并自动处理 Singular 链接
- SDK 要求:最低标准的 Singular SDK 集成即可
Salesforce 营销云 OpenDirect
SFMC 提供 OpenDirect 功能,用于启动带有跟踪链接的应用程序。
- 配置:在消息设置中将 Singular 链接设置为 OpenDirect URL
- 行为:通知点按通过 OpenDirect 协议触发应用程序启动
- 平台支持:适用于 iOS 和 Android
Braze 点击行为
Braze 允许在通知点击行为设置中配置 Singular 跟踪链接。
- 配置:在推送组成器中的点击行为字段中添加奇异链接
- 行为:通知点击打开应用程序并自动处理链接
- 操作类型:支持深度链接和外部 URL 选项
文档:Braze 点击行为
建议在可用时使用直接 CTA 集成--它可简化实施并减少 SDK 配置要求。不过,自定义数据方法可为所有提供商提供最大的灵活性。
最佳实践
请遵循以下指导原则,以最大限度地提高推送通知营销活动跟踪的准确性和有效性。
营销活动结构
链接配置
- 每个营销活动的唯一链接:为每个推送活动创建单独的跟踪链接,以隔离性能
- 描述性参数:在跟踪链接参数中使用清晰的广告系列名称
- 一致的命名:为推送活动建立命名约定(例如,push_promo_2025_q1
- 启动前测试:通过测试通知验证每个新的跟踪链接
技术实施
-
大小写敏感性:始终使用
sng_link(小写 - URL 编码:确保在 API 请求中对跟踪链接进行正确的 URL 编码
- 有效载荷大小:监控通知有效载荷大小--保持在平台限制范围内(APN 为 4KB,FCM 为 4KB
- 错误处理:如果通知中缺少自定义数据,则实施回退逻辑
- SDK 版本:使用最新的 Singular SDK 版本,以获得最佳推送通知支持
性能优化
- 细分:将推送活动定位到参与的用户群,以提高打开率
- 定时:根据用户行为在最佳参与窗口发送通知
- A/B 测试:使用单独的跟踪链接测试不同的消息传递和时间安排
- 频率上限:限制推送频率,避免用户疲劳和退出
- 深度链接:将推送跟踪与特定应用内内容的深度链接相结合
故障排除
常见问题和解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 仪表板中未显示事件 | 未在链接上启用重新参与 | 验证跟踪链接是否已在 "奇异链接 "中启用 "重新参与 "切换。 |
| SDK 无法提取链接 | 自定义数据密钥名称不正确 |
确认关键字正是sng_link (区分大小写) |
| 归属到错误的营销活动 | 在不同营销活动中使用相同链接 | 为每个营销活动创建唯一的跟踪链接 |
| 事件报告延迟 | 网络延迟或脱机模式 | SDK 将事件排成队列,并在恢复连接时发送--最多允许 24 小时 |
| 未跟踪 iOS 通知 | 缺少 APN 数据处理器 |
在通知委托方法中实施setAPNSData() |
| 未跟踪 Android 通知 | 缺少 FCM 数据处理器 |
在 FirebaseMessagingService 中调用setGCMData() |
支持:如需更多故障排除帮助,请联系 Singular 支持,并提供推送通知有效载荷示例、SDK 日志和显示问题的仪表盘截图。