プッシュ通知のサポート
Firebase Cloud Messaging (FCM) とSingular SDKを統合することで、プッシュ通知によるユーザーインタラクションを追跡し、リエンゲージメントキャンペーンやコンバージョン率を正確に測定することができます。
以下の実装ガイドラインに従って、通知データが正しくSingular SDKに渡され、適切なアトリビューションが行われるようにしてください。
プッシュ通知を追跡する理由プッシュ通知はリエンゲージメントを促進しますが、トラッキングには正しい統合が必要です。Singularは、通知を受け取ったユーザーが適切にアトリビューションされるようにし、マーケティングキャンペーンとエンゲージメント戦略を最適化します。
実装ガイド
Singular SDKを統合する
Singular Unity SDKガイドに記載されている標準のインストール手順を使用して、UnityプロジェクトにSingular SDKを統合します。
プッシュリンクパスの設定
プッシュ通知ペイロード構造内でSingularトラッキングリンクが配置されるJSONパスを定義します。
プッシュリンクパスは、通知データ構造内のSingularリンクへのキーパスを指定する前方スラッシュ区切りの文字列を使用して設定します。
// 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"を使用します。 -
ネストされたキー:ネストされたJSON構造をトラバースするには、
"rootObj/nestedObj/key"を使用します。 - 複数のパス:複数のパス文字列を定義して、Singularリンクの異なる可能性のある場所をチェックします。
注:Unityエディタは、インスペクタUI経由のリスト入力をサポートしていないため、パスはネストされた配列ではなく、スラッシュ区切りの文字列として設定されます。
プラットフォーム固有の処理
iOSプッシュ通知ハンドリング
終了状態(アプリが実行されていない)
終了状態のiOSアプリに対して手動で操作する必要はありません。Singular iOSインテグレーションはSingularAppController を使って自動的にプッシュトラッキングを処理します。
自動処理:自動処理:アプリが実行されていない状態でユーザーがプッシュ通知をタップすると、Singularはアプリの起動中に通知ペイロードを自動的にキャプチャします。
バックグラウンド状態(アプリがバックグラウンドで実行中)
アプリがバックグラウンドで実行中に通知を受信した場合、HandlePushNotification() を使用して SDK にプッシュデータを渡します。
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()がバックグラウンド通知ハンドラスクリプト内で呼び出されることを確認してください。
Androidプッシュ通知ハンドリング
自動処理(推奨)
バックグラウンドと終了状態の両方でプッシュ通知を自動処理するために、メインのUnityアクティビティがSingularUnityActivityを拡張していることを確認してください。
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に転送してください。
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コンソールを使用して、プッシュ通知のトラッキングを確認します。 ディープリンクURLフィールドをチェックして、トラッキングリンクが正しくキャプチャされていることを確認します。
高度な構成
ESPドメイン設定
SingularリンクをEメールサービスプロバイダ(ESP)またはその他のサードパーティのドメインでラップする場合は、外部ドメインを設定します。
// 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ドメインを明示的に設定します。
ダイナミックディープリンクルーティング
動的なリダイレクトオーバーライドで1つのSingularトラッキングリンクを設定することで、1つの通知から複数のディープリンク先を実装できます。
使用例複数のアクションオプションを持つニュース速報
-
最新ニュースを読む:
newsapp://article?id=12345 -
トレンドトピック
newsapp://trending -
スポーツ
newsapp://sports
複数のトラッキングリンクを作成する代わりに、1つのSingularリンクを使用し、ユーザーの選択に基づいて動的にリダイレクトを上書きします。実装の詳細については、Singular トラッキングリンクでリダイレクトを上書きするを参照してください。
重要な考慮事項
実装上の注意
-
コールバックハンドラはありません:
SetSingularLinkHandlerと異なり、プッシュ通知機能はペイロードコールバックを提供しません。独自のディープリンクロジックを実装して、ユーザーをアプリ内の特定のコンテンツに誘導してください。 - アトリビューションフロー:ユーザーが通知をタップすると、Singularはペイロードを取得し、SDKの初期化によってトリガーされるセッション開始イベントに含めます。バックエンドはこのデータを処理し、プッシュ通知のタッチポイントをアトリビューションし、リエンゲージメント・トラッキングを登録します。
-
ドメインの制限デフォルトでは、[Manage Links(リンクの管理)]ページからの単一リンクドメイン(
sng.link)のみが許可されます。ラップリンク用のESPドメインは、WithESPDomains()を使用して明示的に設定します。 -
プラットフォームの違い:iOSは自動的に終了状態の通知を処理しますが、Androidは自動処理のために
SingularUnityActivityを拡張する必要があります。
成功:これらのステップに従うことで、あなたのアプリはSingularでプッシュ通知のインタラクションをトラッキングし、キャンペーンパフォーマンスのインサイトを改善し、正確なリエンゲージメントアトリビューションを保証します。