プッシュ通知のサポート

ドキュメント

プッシュ通知を使ったリエンゲージメント・トラッキングのサポート

Singularはプッシュ通知のトラッキングをサポートし、リエンゲージメント測定を強化します。Firebase Cloud Messaging (FCM)をSingular SDKと統合することで、プッシュ通知とやり取りしたユーザーを追跡し、それに応じて属性を設定することができます。

正確なトラッキングを行うには、以下の実装ガイドラインに従い、通知データがSingular SDKに正しく渡されるようにしてください。

なぜプッシュ通知のトラッキングが重要なのですか?

プッシュ通知は重要なリエンゲージメントツールですが、トラッキングには正しい統合が必要です。Singularは通知とやり取りしたユーザーを適切に帰属させ、マーケティングキャンペーンやエンゲージメント戦略を最適化します。


実装ガイド

ステップ1:FlutterでFirebaseプッシュ通知を設定する

まず、FirebaseをFlutterアプリに統合してプッシュ通知に対応させましょう。以下の手順に従ってください:

  1. 依存関係の追加 pubspec.yamlに必要なパッケージを追加する。
    yaml
    dependencies:
      firebase_core: ^2.24.2
      firebase_messaging: ^14.7.10
  2. Firebaseを設定する
    • Android: google-services.jsonandroid/app/ に置き、Gradleファイルを更新する(参照)。
    • iOS: GoogleService-Info.plist を Xcode Runner フォルダに置き、Podfile を Firebase pods で更新します。
  3. FlutterでFirebaseを初期化する main.dart:を更新する。
    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コードを更新してください:

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コードといくつかのネイティブ設定が必要です。

プッシュペイロードの提供

  1. Android
    • 背景AndroidMainActivityonNewIntent をオーバーライドし、Singularにインテントを渡します:
      kotlin
      // 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ブリッジレイヤーによって自動的に処理される。
  2. iOS
    • バックグラウンド:バックグラウンド通知を処理するときに、DartコードでhandlePushNotificationを呼び出します:
      dart
      void _processNotificationForSingular(
          String title, String body, Map<String, dynamic> data) {
        Singular.handlePushNotification(data);
      }
    • 終了しました: AppDelegate.swift を更新し、起動オプションを処理できるようにしました:
      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)
        }
      }

Singular Configでプッシュリンクパスを設定する

SingularのSDKを設定し、通知ペイロード内の特定のパスを再エンゲージメントのアトリビューションとして認識できるようにします:

dart
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());
}

検証ガイド

ステップ4:セッション開始コールでプッシュ通知の受信を検証/確認する

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&current_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%2Fmain

    Singularリンクを別のドメイン(例:EメールサービスプロバイダのESPドメイン)でラップする場合は、セットアップで以下のオプションを追加して明示的にドメインを設定する必要があります:これにより、Singularフレームワーク内で外部ドメインが認識され、許可されるようになります。以下の設定例を参照してください。config.withESPDomains(Arrays.asList("sl.esp.link"));

  • 1つのプッシュ通知からユーザーのアクションに基づいて異なるディープリンクをトリガーする必要がある場合、1つのSingularトラッキングリンクを使用し、動的にリダイレクトを変更することができます。

    ニュース速報のプッシュ通知は複数のディープリンクオプションを提供することがあります!複数のトラッキングリンクを作成する代わりに、1つのSingularトラッキングリンクを設定し、ユーザーの選択に基づいて動的にリダイレクトを調整します。

    最新ニュースを読む
    newsapp://article?id=12345
    トレンドトピックを読む →トレンドトピックを読む
    newsapp://trending
    スポーツ
    newsapp://sports


    リダイレクトのオーバーライドについては、Singularトラッキングリンクをご覧ください。

成功です!

以下のステップに従うことで、あなたのアプリはSingularを使ってプッシュ通知のインタラクションをトラッキングするように設定されました。これにより、キャンペーンのパフォーマンスインサイトが改善され、正確なリエンゲージメントアトリビューションが保証されます。