プッシュ通知を使ったリエンゲージメント・トラッキングのサポート
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 フォルダに置き、Podfile を Firebase pods で更新します。
-
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用に準備する必要がある。ここでは、異なるアプリの状態での通知の扱い方を説明します:
Android
- フォアグラウンド:Android Foreground: 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 Configでプッシュリンクパスを設定する
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のリンクドメインだけを許可する安全機構を持っています。具体的には、Singular Manage Linksページで事前に定義されたsng.link ドメインのみが許可されます。
例えば
https://prod_test.sng.link/B0s2a/51oi?_dl=singular%3A%2F%2FmainSingularリンクを別のドメイン(例:EメールサービスプロバイダのESPドメイン)でラップする場合は、セットアップで以下のオプションを追加して明示的にドメインを設定する必要があります:これにより、Singularフレームワーク内で外部ドメインが認識され、許可されるようになります。以下の設定例を参照してください。config.withESPDomains(Arrays.asList("sl.esp.link"));
-
1つのプッシュ通知からユーザーのアクションに基づいて異なるディープリンクをトリガーする必要がある場合、1つのSingularトラッキングリンクを使用し、動的にリダイレクトを変更することができます。
例
ニュース速報のプッシュ通知は複数のディープリンクオプションを提供することがあります!複数のトラッキングリンクを作成する代わりに、1つのSingularトラッキングリンクを設定し、ユーザーの選択に基づいて動的にリダイレクトを調整します。
最新ニュースを読む
トレンドトピックを読む →トレンドトピックを読むnewsapp://article?id=12345
スポーツnewsapp://trending
newsapp://sports
成功です!
以下のステップに従うことで、あなたのアプリはSingularを使ってプッシュ通知のインタラクションをトラッキングするように設定されました。これにより、キャンペーンのパフォーマンスインサイトが改善され、正確なリエンゲージメントアトリビューションが保証されます。