Unity SDK - 支持推送通知

文档

支持推送通知

通过将 Firebase Cloud Messaging (FCM) 与 Singular SDK 集成,跟踪用户与推送通知的互动,以衡量再参与活动并准确归因于转化。

请遵循以下实施指南,以确保通知数据正确传递到 Singular SDK,从而获得正确的归因。

为什么要跟踪推送通知?推送通知能推动用户重新参与,但跟踪需要正确的整合。Singular 可确保与通知互动的用户得到正确归因,从而优化营销活动和参与策略。


实施指南

集成 Singular SDK

使用Singular Unity SDK 指南中的标准安装说明,在您的 Unity 项目中集成Singular SDK


配置推送链接路径

在推送通知有效载荷结构中定义 Singular 跟踪链接所在的 JSON 路径。

使用前冲分隔字符串配置推送链接路径,指定通知数据结构中 Singular 链接的关键路径。

C#
// Configure push link paths in SDK initialization
SingularConfig config = new SingularConfig("SDK_KEY", "SDK_SECRET")
    .WithPushNotificationsLinkPaths(new List<string> 
    {
        "sng_link",                                    // Top-level key
        "path/to/url",                                 // Nested path
        "rootObj/nestedObj/singularLink"               // Deep nested path
    });

SingularSDK.InitializeSingularSDK();

路径配置示例

  • 简单键:对有效负载中的顶级键使用"sng_link"
  • 嵌套键:使用"rootObj/nestedObj/key"遍历嵌套的 JSON 结构
  • 多路径:定义多个路径字符串,以检查奇异链接的不同可能位置

注:Unity 编辑器不支持通过其 Inspector UI 输入列表,因此路径被配置为正向斜线分隔字符串,而不是嵌套数组。


特定平台处理

iOS 推送通知处理

终止状态(应用程序未运行)

处于终止状态的 iOS 应用程序无需手动操作。Singular iOS 集成会使用SingularAppController 自动处理推送跟踪。

自动处理:当用户在应用程序未运行时点击推送通知,Singular 会在应用程序启动时自动捕获通知有效载荷。

后台状态(应用程序在后台运行)

当应用程序处于后台时收到通知,可使用HandlePushNotification() 将推送数据传递给 SDK。

C#
using UnityEngine;
using Singular;
using Firebase.Messaging;
using System.Collections.Generic;

public class PushNotificationHandler : MonoBehaviour
{
    void Start()
    {
        // Subscribe to Firebase message received event
        Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
    }

    private void OnMessageReceived(object sender, MessageReceivedEventArgs e)
    {
        Debug.Log("Received Firebase push notification");

        // Extract notification data
        var pushDataDictionary = new Dictionary<string, string>(e.Message.Data);

        // Pass notification data to Singular SDK
        SingularSDK.HandlePushNotification(pushDataDictionary);

        // Your additional notification handling logic
        DisplayNotification(e.Message);
    }
}

重要:确保在任何自定义通知处理逻辑之前,在后台通知处理程序脚本中调用HandlePushNotification()


安卓推送通知处理

自动处理(推荐)

确保您的主 Unity 活动扩展了SingularUnityActivity,以便在后台和终止状态下自动处理推送通知。

Java
import com.singular.unitybridge.SingularUnityActivity;

public class MessagingUnityPlayerActivity extends SingularUnityActivity {
    // Your custom activity logic here

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Your initialization code
    }
}

最佳实践:通过扩展SingularUnityActivity ,当应用程序处于后台或终止状态时,SDK 会自动处理推送通知,从而避免了手动通知处理。

Firebase 集成示例

如果您需要自定义 Firebase 消息处理逻辑,请实现一个监听器并将通知数据转发给 Singular。

C#
using UnityEngine;
using Singular;
using Firebase.Messaging;
using System.Collections.Generic;

public class AndroidPushHandler : MonoBehaviour
{
    void Start()
    {
        // Subscribe to Firebase messaging events
        Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
        Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
    }

    private void OnMessageReceived(object sender, MessageReceivedEventArgs e)
    {
        Debug.Log("Received a new Firebase message");

        // Convert message data to dictionary
        var pushDataDictionary = new Dictionary<string, string>(e.Message.Data);

        // Forward to Singular SDK for attribution
        SingularSDK.HandlePushNotification(pushDataDictionary);

        // Your custom handling logic
        ProcessNotificationContent(e.Message);
    }

    private void OnTokenReceived(object sender, TokenReceivedEventArgs token)
    {
        Debug.Log($"FCM Token received: {token.Token}");

        // Store or use token as needed
        // Note: Singular automatically handles token registration
    }

    private void ProcessNotificationContent(FirebaseMessage message)
    {
        // Your custom notification display or routing logic
        string title = message.Notification?.Title ?? "Notification";
        string body = message.Notification?.Body ?? "";

        Debug.Log($"Notification: {title} - {body}");
    }
}

验证指南

验证启动会话中的有效载荷

通过检查启动会话 API 调用,确认推送通知链接已正确传递给 Singular。

当用户点击通知时,Singular SDK 会在开始会话请求的singular_link 参数下包含推送通知有效载荷。

启动会话请求示例

https://sdk-api-v1.singular.net/api/v1/start?
a=<SDK-Key>
&singular_link=https://singularassist2.sng.link/C4nw9/r1m0?_dl=singular%3A%2F%2Ftest&_smtype=3
&i=com.yourcompany.app
&s=1740905574084
&sdk=Singular/Unity-v1.0.0

替代验证:使用 Singular SDK 控制台验证推送通知跟踪。 检查Deeplink URL字段,确认跟踪链接已正确捕获。


高级配置

ESP 域配置

如果您在电子邮件服务提供商(ESP)或其他第三方域中封装 Singular 链接,请配置外部域。

C#
// Configure ESP domains for wrapped Singular links
SingularConfig config = new SingularConfig("SDK_KEY", "SDK_SECRET")
    .WithESPDomains(new List<string> { "sl.esp.link", "custom.domain.com" });

SingularSDK.InitializeSingularSDK();

安全提示:默认情况下,只允许在 "Singular 管理链接 "页面中预定义sng.link域。如果使用封装链接,请明确配置 ESP 域。


动态深度链接路由

通过配置一个具有动态重定向重写功能的 Singular 跟踪链接,从单个通知中实现多个深度链接目的地。

用例示例:具有多个操作选项的突发新闻通知

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

与其创建多个跟踪链接,不如使用一个单一链接,并根据用户选择动态覆盖重定向。有关实施详情,请参阅在奇异跟踪链接中覆盖重定向


重要注意事项

实施注意事项

  • 无回调处理程序:SetSingularLinkHandler 不同,推送通知功能不提供有效载荷回调。请实施您自己的深度链接逻辑,将用户引导至您应用中的特定内容。
  • 归属流:当用户点击通知时,Singular 会检索有效载荷,并将其包含在 SDK 初始化触发的启动会话事件中。后台会处理这些数据,对推送通知接触点进行归因,并注册重新参与跟踪。
  • 域限制:默认情况下,只允许使用 "管理链接 "页面上的单链接域 (sng.link)。请使用WithESPDomains()为封装链接明确配置 ESP 域。
  • 平台差异:iOS 自动处理终止状态通知,而 Android 需要扩展SingularUnityActivity 才能自动处理

成功:通过这些步骤,您的应用程序现在可以通过 Singular 跟踪推送通知互动,从而提高活动性能洞察力并确保准确的再参与归因。