푸시 알림 지원

문서

푸시 알림을 이용한 리인게이지먼트 추적 지원

Singular는 리인게이지먼트 측정을 향상시키기 위해 푸시 알림 추적을 지원합니다. Firebase 클라우드 메시징(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: android/app/google-services.json 를 배치하고 Gradle 파일을 업데이트합니다( ).
    • iOS: GoogleService-Info.plist 을 Xcode Runner 폴더에 배치하고 Podfile 을 Firebase 포드로 업데이트합니다.
  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

  • 포그라운드: 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
    • 배경: Android MainActivity 에서 onNewIntent 을 재정의하여 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 컨피규레이션에서 푸시 링크 경로 설정하기

리인게이지먼트 어트리뷰션을 위해 알림 페이로드에서 특정 경로를 인식하도록 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 콘솔을 사용하여 딥링크 URL 아래의 푸시 알림 추적 링크를 확인할 수 있습니다.

이를 확인하면 푸시 알림 인게이지먼트가 Singular SDK 내에서 올바르게 추적되는지 확인할 수 있습니다.

참고:

  • Singular 링크 핸들러 코드와 달리, Singular SDK는 이 기능에 대한 푸시 페이로드 콜백을 제공하지 않는다는 점에 유의하세요. 푸시 알림 데이터를 읽고 딥링킹 로직을 구현하여 사용자를 앱 내의 특정 제품 페이지로 리디렉션하는 것은 앱 개발자의 책임입니다. 이 솔루션에서 Singular는 사용자가 알림을 탭할 때 푸시 알림 페이로드를 검색하고 이 페이로드를 Singular.start(config) 에 의해 트리거되는 SDK 시작 세션 이벤트에 포함합니다 . 그런 다음 이 데이터는 Singular 백엔드에서 처리되어 푸시 알림 터치포인트/클릭에 어트리뷰션을 부여하고 리인게이지먼트 추적을 위해 등록됩니다.
  • 푸시 알림 페이로드에 전달된 사용자 지정 키 값 쌍에서 Singular 링크 도메인만 허용하는 안전 메커니즘이 마련되어 있습니다. 구체적으로, Singular 링크 관리 페이지에서 미리 정의된 sng.link 도메인만 허용됩니다.

    예를 들어
    https://prod_test.sng.link/B0s2a/51oi?_dl=singular%3A%2F%2Fmain

    Singular 링크를 다른 도메인(예: 이메일 서비스 제공업체의 ESP 도메인 ) 내에 래핑하려는 경우 설정에서 다음 옵션을 추가하여 도메인을 명시적으로 구성해야 합니다: 이렇게 하면 외부 도메인이 Singular 프레임워크 내에서 인식되고 허용됩니다. 아래 구성 예시를 참조하세요. config.withESPDomains(Arrays.asList("sl.esp.link"));

  • Singular 푸시 알림에서 사용자 행동에 따라 다른 딥링크를 트리거해야 하는 경우, Singular Singular 추적 링크를 사용하고 리디렉션을 동적으로 수정할 수 있습니다.

    예시:

    속보에 대한 푸시 알림에 여러 개의 딥링크 옵션을 제공할 수 있습니다! 여러 개의 트래킹 링크를 만드는 대신 하나의 Singular 트래킹 링크를 구성하고 사용자 선택에 따라 리디렉션을 동적으로 조정하세요.

    최신 뉴스 읽기
    newsapp://article?id=12345
    인기 토픽
    newsapp://trending
    스포츠
    newsapp://sports


    Singular 추적 링크에서 리디렉션 재정의에 대해 자세히 알아보세요.

성공!

이 단계를 수행하면 이제 앱이 Singular를 사용하여 푸시 알림 상호 작용을 추적하도록 설정되었습니다. 이를 통해 캠페인 성과 인사이트를 개선하고 정확한 리인게이지먼트 어트리뷰션을 보장할 수 있습니다.