Unity SDK - アンインストールトラッキング

ドキュメント

アンインストール追跡

プッシュ通知サービスをSingular SDKと統合することで、アプリのアンインストールを追跡し、ユーザーのリテンションを測定し、リエンゲージメントキャンペーンを最適化します。

重要:Google は 2018 年 4 月に GCM API を廃止しました。 Android のアンインストールトラッキングの実装にはすべて Firebase Cloud Messaging (FCM) を使用してください。

Android アンインストールトラッキング

前提条件

Unity アプリにアンインストールトラッキングを実装する前に、Setting Up Android Uninstall Tracking のガイドに従って、Singular プラットフォームでアプリを設定してください。


システム要件

アンインストールトラッキングには、Firebase Cloud Messaging と特定のデバイス設定が必要です。

FCM 要件(ソース):

  • Android バージョン:Android 4.1 (API 16) 以降を実行しているデバイスが必要です。
  • Google Play サービス:Google Playストアアプリがインストールされている必要があります。
  • エミュレータのサポート:Google APIを搭載したAndroid 4.1以上のエミュレータに対応しています。
  • 配布:アプリは Google Play ストア以外でも配布でき、アンインストール追跡をサポートします。

注意:サポートされていない Android バージョンまたは Google Play サービスを利用していないデバイスのユーザーは、アンインストールを追跡されません。


実装ステップ

ステップ 1: Firebase Cloud Messaging の統合

まだ設定されていない場合は、Unity アプリで Firebase Cloud Messaging を設定します。

Google の公式ガイドに従ってUnity に Firebase Cloud Messaging を設定します。 これには以下が含まれます:

  1. UnityプロジェクトにFirebaseを追加する
  2. Firebase Messaging Unity パッケージをインポートする。
  3. Android 用の Firebase 設定
  4. 通知パーミッションのリクエスト(Android 13以上)

ステップ 2: AndroidManifest.xml の設定

FCM メッセージを受信するために Android マニフェストに Firebase Messaging Service を登録します。

AndroidManifest.xml
<service 
    android:name=".java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

重要 .java.MyFirebaseMessagingServiceFirebaseMessagingService を継承するクラスの完全修飾名に置き換えてください。


ステップ 3: FCM デバイストークンの登録

FCMデバイストークンを取得し、SDKの初期化前にアンインストールトラッキングのためにSingularに送信します。

C#
using UnityEngine;
using Singular;
using Firebase.Messaging;
using System.Threading.Tasks;

public class UninstallTrackingManager : MonoBehaviour
{
    async void Start()
    {
        // Initialize Firebase
        await InitializeFirebase();

        // Get FCM token and register it with Singular
        await RegisterFCMToken();

        // Initialize Singular SDK after registering the token
        SingularSDK.InitializeSingularSDK();
    }

    private async Task InitializeFirebase()
    {
        var dependencyStatus = await Firebase.FirebaseApp.CheckAndFixDependenciesAsync();

        if (dependencyStatus == Firebase.DependencyStatus.Available)
        {
            Debug.Log("Firebase is ready");
        }
        else
        {
            Debug.LogError($"Could not resolve Firebase dependencies: {dependencyStatus}");
        }
    }

    private async Task RegisterFCMToken()
    {
        try
        {
            // Get FCM token
            string token = await Firebase.Messaging.FirebaseMessaging.GetTokenAsync();

            if (!string.IsNullOrEmpty(token))
            {
                // Register token with Singular BEFORE SDK initialization
                SingularSDK.RegisterTokenForUninstall(token);
                Debug.Log($"FCM token registered with Singular: {token}");
            }
            else
            {
                Debug.LogWarning("FCM token is empty");
            }
        }
        catch (System.Exception ex)
        {
            Debug.LogError($"Error getting FCM token: {ex.Message}");
        }
    }
}

RegisterTokenForUninstall()SingularSDK.InitializeSingularSDK() 初期化後にトークンを登録しても、アンインストール追跡は有効になりません。


ステップ 4: トークンの更新

正確なアンインストールトラッキングを維持するために、FCM トークンが更新されるたびに Singular でトークンを更新します。

C#
using UnityEngine;
using Singular;
using Firebase.Messaging;

public class FCMTokenRefreshHandler : MonoBehaviour
{
    void Start()
    {
        // Subscribe to token refresh event
        Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
    }

    void OnDestroy()
    {
        // Unsubscribe when destroyed
        Firebase.Messaging.FirebaseMessaging.TokenReceived -= OnTokenReceived;
    }

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

        // Update token with Singular
        SingularSDK.RegisterTokenForUninstall(e.Token);

        // Also send token to your server if needed
        SendTokenToServer(e.Token);
    }

    private void SendTokenToServer(string token)
    {
        // Implement your server communication logic here
        Debug.Log($"Sending token to server: {token}");
    }
}

ベストプラクティスです:FCM トークンはいつでも更新できます(アプリの更新、デバイスの復元など)。常にTokenReceived イベントを購読し、Singular を最新のトークンで更新してください。


iOSのアンインストールトラッキング

前提条件

iOS のアンインストールトラッキングは、Apple Push Notification service (APNs) テクノロジーに基づいています。

アプリがプッシュ通知に対応していない場合は、Apple の「アプリを APNs に登録する」ガイドを参照してください。


APNSデバイストークンの登録

SDKが初期化された後、RegisterTokenForUninstall メソッドを使用してAPNsから返されたデバイストークンを渡します。

メソッドのシグネチャ

public static void RegisterTokenForUninstall(string APNSToken)

パラメータ

  • APNSToken:APNから返されたデバイストークンを16進文字列で指定します。

トークンの形式:APNSトークンは通常バイナリデータですが、16進文字列表現としてSingularに渡す必要があります。


使用例

iOSのアンインストールトラッキングのために、APNSデバイストークンをSingularに登録します。

C#
using UnityEngine;
using Singular;

#if UNITY_IOS
using Unity.Notifications.iOS;
#endif

public class iOSUninstallTracking : MonoBehaviour
{
    void Start()
    {
        #if UNITY_IOS
        // Initialize Singular SDK first
        SingularSDK.InitializeSingularSDK();

        // Request notification authorization
        RequestNotificationAuthorization();
        #endif
    }

    #if UNITY_IOS
    private void RequestNotificationAuthorization()
    {
        var authorizationOption = AuthorizationOption.Alert | 
                                  AuthorizationOption.Badge | 
                                  AuthorizationOption.Sound;

        using (var req = new AuthorizationRequest(authorizationOption, true))
        {
            while (!req.IsFinished)
            {
                // Wait for authorization
            }

            string deviceToken = req.DeviceToken;

            if (!string.IsNullOrEmpty(deviceToken))
            {
                // Convert device token to hex string and register with Singular
                SingularSDK.RegisterTokenForUninstall(deviceToken);
                Debug.Log($"APNS token registered: {deviceToken}");
            }
            else
            {
                Debug.LogWarning("Failed to get APNS device token");
            }
        }
    }
    #endif
}

トークンの例

// Pass the APNS token as a hex-string
SingularSDK.RegisterTokenForUninstall("ba85ab31a7c7f5c2f012587f29fb0e596d4b67e7b7b2838fa1a8582c1f7dbdee");

プラットフォームの違い:SDK の初期化前にトークンを登録する必要がある Android とは異なり、iOS のトークンは SDK の初期化後に登録する必要があります。


検証とトラブルシューティング

実装の確認

アンインストールトラッキングが正しく動作していることを確認します。

  1. ログの確認トークン登録がUnityコンソールのログに表示されることを確認します。
  2. トークン生成のテスト:最初のアプリ起動時にトークンが生成されることを確認します。
  3. ダッシュボードを監視する:24~48時間後のアンインストール追跡データをSingularダッシュボードで確認する
  4. トークン更新のテスト:アプリのデータを消去し、トークンが正しく更新されることを確認する

よくある問題

  • Android トークンが生成されない:Firebase の依存関係が正しく追加され、Unity プロジェクトで Firebase が設定されていることを確認します。
  • トークンが更新されない:Android ではTokenReceived イベントを購読しているか、iOS では APNs コールバックを適切に処理しているか確認してください。
  • データがないデバイスがプラットフォーム要件(Android 4.1+ with Google Play Services、iOS with APNs support)を満たしていることを確認してください。
  • 設定エラー:Singularプラットフォームの設定でアンインストールトラッキングが有効になっていることを確認する。
  • 初期化の順序:Android の場合、InitializeSingularSDK()前に RegisterTokenForUninstall() が呼び出されていることを確認する。

その他のリソース:詳細なトラブルシューティングについては、Android Uninstall Tracking Setup GuideおよびFirebase Cloud Messaging for Unity Documentation を参照してください。