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

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

Firebase Cloud Messaging (FCM) を Singular SDK と連携することで、アプリの アンインストールをトラッキングし、ユーザーリテンションの測定と リエンゲージメントキャンペーンの最適化を実現します。

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

前提条件

Singular プラットフォームの設定

アプリでアンインストールトラッキングを実装する前に、Singular プラットフォーム でアプリを設定し、 Android アンインストールトラッキングのセットアップ に記載されている Android SDK + FCM 連携手順を完了してください。


システム要件

アンインストールトラッキングには 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 の統合

まだ設定されていない場合は、アプリに Firebase Cloud Messaging をセットアップ してください。

Google の公式ガイド Android で Firebase Cloud Messaging クライアントアプリをセットアップ に従ってください。これには以下が含まれます:

  1. Android プロジェクトに Firebase を追加
  2. FCM SDK の依存関係を app/build.gradle に追加
  3. Firebase Messaging Service クラスを作成
  4. 通知権限をリクエスト (Android 13+)

手順 2: AndroidManifest.xml の FCM 設定を確認

FCM サービスと権限の確認

アプリが Firebase Cloud Messaging とすでに連携されており、Android マニフェストが FCM メッセージを受信するための FirebaseMessagingService を宣言していることを確認してください。

XML
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.your.package">

    <!-- FCM Permissions -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

    <application>

        <!-- App Firebase Messaging Service -->
        <service
            android:name=".MyFirebaseMessagingService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>

    </application>

</manifest>

重要: .MyFirebaseMessagingService FirebaseMessagingService を継承するクラスの完全修飾名に置き換えてください。アプリ内で com.google.firebase.MESSAGING_EVENT インテントを処理するサービスは 1 つだけにしてください。


手順 3: FCM デバイストークンの登録

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

トークンの取得と設定

FCM トークンを取得し、SDK の初期化直後に Singular に登録します。

Kotlin Java
import com.google.firebase.messaging.FirebaseMessaging
import com.singular.sdk.Singular

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Initialize Singular SDK
        val config = SingularConfig("SDK_KEY", "SDK_SECRET")
        Singular.init(applicationContext, config)

        // Retrieve and register FCM token
        FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w("FCM", "Fetching FCM token failed", task.exception)
                return@addOnCompleteListener
            }

            // Get FCM token
            val token = task.result

            // Register token with Singular
            Singular.setFCMDeviceToken(token)
            Log.d("FCM", "FCM token registered with Singular: $token")
        }
    }
}

ベストプラクティス: 最初のアプリセッションからアンインストール トラッキングが有効になるよう、 Singular.init() の直後に FCM トークンを登録してください。

Singular.setFCMDeviceToken() は、 Singular.init() の完了前に呼び出された場合や、トークン引数が null または空の場合、エラーを出さずに何もしません。トークン登録が機能していない ように見える場合は、SDK が先に初期化されており、Firebase から返された FCM トークンが空でない文字列であることを確認してください。


トークンの更新処理

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

Kotlin Java
import com.google.firebase.messaging.FirebaseMessagingService
import com.singular.sdk.Singular

class MyFirebaseMessagingService : FirebaseMessagingService() {

    override fun onNewToken(token: String) {
        super.onNewToken(token)

        // Send updated token to Singular
        Singular.setFCMDeviceToken(token)
        Log.d("FCM", "New FCM token registered: $token")

        // Also send token to your server if needed
        sendTokenToServer(token)
    }

    private fun sendTokenToServer(token: String) {
        // Implement your server communication logic here
    }
}

重要: FCM トークンはいつでも更新される可能性があります (アプリ更新、デバイス復元など)。Singular を最新の状態に保つために、 必ず onNewToken() を実装してください。


代替の設定方法

初期化時にトークンを設定する

SDK 初期化前に FCM トークンを利用できる場合は、 SingularConfig オブジェクトで設定します。

Kotlin Java
// Get token synchronously (if cached)
val cachedToken = getStoredFCMToken() // Your caching logic

val config = SingularConfig("SDK_KEY", "SDK_SECRET")
    .withFCMDeviceToken(cachedToken)

Singular.init(applicationContext, config)

メソッドシグネチャ:

public SingularConfig withFCMDeviceToken(String fcmDeviceToken);

withFCMDeviceToken は、初期化時点で保持しているトークンを SDK にシードするだけです。トークン 更新のサブスクライブは行いません。Singular の記録を最新の状態に保つには、 引き続き FirebaseMessagingService.onNewToken を実装し、そこから Singular.setFCMDeviceToken(newToken) を呼び出す必要があります。この設定メソッドも、渡されたトークンが null または空の場合は、エラーを出さずに何もしません。


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

実装の検証

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

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

よくある問題

  • トークンが生成されない: FCM の依存関係が正しく追加され、 プロジェクトに Firebase が設定されていることを確認
  • トークンが更新されない: onNewToken() コールバックが FirebaseMessagingService に実装されていることを確認
  • データが欠落している: デバイスが FCM 要件 (Android 4.1+、 Google Play サービスのインストール) を満たしていることを確認
  • 設定エラー: Singular プラットフォーム設定でアンインストール トラッキングが有効になっていることを確認

関連リソース: 詳細なトラブルシューティングについては、 アンインストールトラッキングセットアップガイド Firebase Cloud Messaging ドキュメント を参照してください。