Cordova SDK - アンインストール追跡

ドキュメント

アンインストール追跡

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

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


概要

アンインストールトラッキングの仕組み

アンインストールトラッキングは、Singular にプッシュ通知トークンを登録することで、アプリの削除を監視します。デバイスがプッシュ通知に反応しなくなると、Singular はアプリがアンインストールされたと識別します。

  • AndroidFirebase Cloud Messaging (FCM) トークンを使用してアンインストールを検出します。
  • iOSApple Push Notification service (APNs) トークンを使用してアンインストールを検出します。
  • データの正確性:長期的なユーザーの維持とエンゲージメントに関する洞察を提供します。

Android アンインストール追跡

前提条件

Android アンインストールトラッキングを実装する前に、Android アンインストールトラッキングセットアップガイドに従って、Singular プラットフォームでアプリを設定します。

必要条件

  • Android バージョン:Android 4.1 (API 16) 以上を実行しているデバイスであること。
  • Google Play サービス:デバイスに Google Play ストアアプリがインストールされていること
  • Firebaseのセットアップ:Firebase Cloud Messagingがプロジェクトで設定されている必要があります。
  • パーミッションAndroid 13以上では明示的な通知許可が必要

実装ステップ

ステップ 1: Firebase プラグインのインストール

CordovaプロジェクトにFirebaseプラグインを追加し、プッシュ通知をサポートします。cordova-plugin-firebase-messagingプラグインを推奨します。

bash
cordova plugin add cordova-plugin-firebase-messaging

Firebase の詳細な設定方法については、プラグインのドキュメントを参照してください。


ステップ 2: Firebase の設定

Android用CordovaプロジェクトにFirebase設定ファイルを追加します。

  1. Firebase Console プロジェクトに Android アプリを登録します。
  2. google-services.json をダウンロードし、プロジェクトルートまたはplatforms/android/app/に配置します。
  3. プラグインのインストール中に Firebase メッセージング依存関係がプロジェクトに追加されていることを確認します。

ステップ 3: 通知許可のリクエスト

FCMトークンを取得する前に、ユーザーに通知許可をリクエストします(Android 13以上で必要)。

JavaScript
document.addEventListener('deviceready', initializeApp, false);

function initializeApp() {
  if (device.platform === 'Android') {
    // Request notification permission (Android 13+)
    requestAndroidNotificationPermission();
  }
}

function requestAndroidNotificationPermission() {
  // Check Android version
  if (device.version >= 13) {
    cordova.plugins.permissions.requestPermission(
      cordova.plugins.permissions.POST_NOTIFICATIONS,
      function(status) {
        if (status.hasPermission) {
          console.log('Notification permission granted');
          retrieveAndRegisterFCMToken();
        } else {
          console.warn('Notification permission denied - uninstall tracking unavailable');
        }
      },
      function(error) {
        console.error('Permission request error:', error);
      }
    );
  } else {
    // Android 12 and below automatically have permission
    retrieveAndRegisterFCMToken();
  }
}

注:パーミッションをリクエストするには、cordova-plugin-android-permissionsプラグインをインストールします:

cordova plugin add cordova-plugin-android-permissions

ステップ4:FCMトークンの取得と登録

FCMデバイストークンを取得し、パーミッションが付与された後、setUninstallToken() メソッドを使用してSingularに登録します。

JavaScript
function retrieveAndRegisterFCMToken() {
  // Get FCM token
  cordova.plugins.firebase.messaging.getToken().then(function(token) {
    if (token) {
      console.log('FCM token retrieved:', token);
      
      // Register token with Singular for uninstall tracking
      cordova.plugins.SingularCordovaSdk.setUninstallToken(token);
      
      console.log('FCM token registered with Singular');
    } else {
      console.warn('No FCM token available');
    }
  }).catch(function(error) {
    console.error('Error retrieving FCM token:', error);
  });
}

メソッドの詳細については、setUninstallTokenリファレンスを参照してください。


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

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

JavaScript
document.addEventListener('deviceready', setupTokenRefreshListener, false);

function setupTokenRefreshListener() {
  if (device.platform === 'Android') {
    // Listen for FCM token refresh events
    cordova.plugins.firebase.messaging.onTokenRefresh(function(token) {
      console.log('FCM token refreshed:', token);
      
      // Update Singular with new token
      cordova.plugins.SingularCordovaSdk.setUninstallToken(token);
    });
  }
}

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


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

前提条件

iOSアンインストールトラッキングセットアップガイドに従って、SingularプラットフォームでiOSアプリを設定します。

iOS でのアンインストールトラッキングは、Apple Push Notification サービス(APNs)テクノロジーを使用します。アプリがプッシュ通知に対応していない場合は、Apple の「APNs にアプリを登録する」ガイドを参照してください。


実装ステップ

ステップ1:iOSの通知許可をリクエストする

ユーザーに通知許可をリクエストし、APNSデバイストークンを取得します。

JavaScript
document.addEventListener('deviceready', initializeIOSTracking, false);

function initializeIOSTracking() {
  if (device.platform === 'iOS') {
    requestIOSNotificationPermission();
  }
}

function requestIOSNotificationPermission() {
  // Request iOS notification authorization
  cordova.plugins.firebase.messaging.requestPermission({
    forceShow: true
  }).then(function(hasPermission) {
    if (hasPermission) {
      console.log('iOS notification permission granted');
      retrieveAndRegisterAPNSToken();
    } else {
      console.warn('iOS notification permission denied - uninstall tracking unavailable');
    }
  }).catch(function(error) {
    console.error('Error requesting iOS notification permission:', error);
  });
}

ステップ2:APNSトークンの取得と登録

APNSデバイストークンを取得し、認可後にsetUninstallToken() メソッドを使用してSingularに登録します。

JavaScript
function retrieveAndRegisterAPNSToken() {
  // Get APNS token (iOS)
  cordova.plugins.firebase.messaging.getToken().then(function(token) {
    if (token) {
      console.log('APNS token retrieved:', token);
      
      // Register token with Singular for uninstall tracking
      cordova.plugins.SingularCordovaSdk.setUninstallToken(token);
      
      console.log('APNS token registered with Singular');
    } else {
      console.warn('No APNS token available');
    }
  }).catch(function(error) {
    console.error('Error retrieving APNS token:', error);
  });
}

トークンのフォーマットFirebase Messagingから取得したAPNSトークンは、すでにSingular用に正しくフォーマットされています。追加の変換は必要ありません。


ステップ 3: トークン更新の処理 (iOS)

アプリのライフサイクル中に APNS トークンが変更された場合、Singular で更新します。

JavaScript
document.addEventListener('deviceready', setupIOSTokenRefreshListener, false);

function setupIOSTokenRefreshListener() {
  if (device.platform === 'iOS') {
    // Listen for APNS token refresh events
    cordova.plugins.firebase.messaging.onTokenRefresh(function(token) {
      console.log('APNS token refreshed:', token);
      
      // Update Singular with new token
      cordova.plugins.SingularCordovaSdk.setUninstallToken(token);
    });
  }
}

完全なクロスプラットフォーム実装

統一されたアンインストールトラッキングセットアップ

適切なエラー処理とトークン更新ロジックを使用して、Android と iOS の両方のプラットフォームでアンインストールトラッキングを実装します。

JavaScript
document.addEventListener('deviceready', initializeUninstallTracking, false);

function initializeUninstallTracking() {
  console.log('Initializing uninstall tracking for:', device.platform);
  
  // Setup token refresh listener for both platforms
  setupTokenRefreshListener();
  
  // Platform-specific initialization
  if (device.platform === 'Android') {
    setupAndroidUninstallTracking();
  } else if (device.platform === 'iOS') {
    setupIOSUninstallTracking();
  }
}

function setupAndroidUninstallTracking() {
  // Check Android version for permission requirements
  if (device.version >= 13) {
    // Request notification permission for Android 13+
    cordova.plugins.permissions.requestPermission(
      cordova.plugins.permissions.POST_NOTIFICATIONS,
      function(status) {
        if (status.hasPermission) {
          retrieveAndRegisterToken();
        } else {
          console.warn('Android notification permission denied');
        }
      },
      function(error) {
        console.error('Permission request error:', error);
      }
    );
  } else {
    // Android 12 and below - permission not required
    retrieveAndRegisterToken();
  }
}

function setupIOSUninstallTracking() {
  // Request iOS notification authorization
  cordova.plugins.firebase.messaging.requestPermission({
    forceShow: true
  }).then(function(hasPermission) {
    if (hasPermission) {
      retrieveAndRegisterToken();
    } else {
      console.warn('iOS notification permission denied');
    }
  }).catch(function(error) {
    console.error('Error requesting iOS permission:', error);
  });
}

function retrieveAndRegisterToken() {
  // Get push notification token (FCM for Android, APNS for iOS)
  cordova.plugins.firebase.messaging.getToken()
    .then(function(token) {
      if (token) {
        console.log('Token retrieved for ' + device.platform + ':', token);
        
        // Register token with Singular
        cordova.plugins.SingularCordovaSdk.setUninstallToken(token);
        
        console.log('Token registered with Singular successfully');
      } else {
        console.warn('No token available for ' + device.platform);
      }
    })
    .catch(function(error) {
      console.error('Error retrieving token:', error);
    });
}

function setupTokenRefreshListener() {
  // Listen for token refresh events on both platforms
  cordova.plugins.firebase.messaging.onTokenRefresh(function(token) {
    console.log('Token refreshed for ' + device.platform + ':', token);
    
    // Update Singular with new token
    cordova.plugins.SingularCordovaSdk.setUninstallToken(token);
  });
}

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

実装の検証

本番環境にデプロイする前に、アンインストールトラッキングが正しく動作していることを確認します。

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

よくある問題

  • トークンが生成されない:Firebase プラグインが正しくインストールされ、Cordova プロジェクトで Firebase が設定されていることを確認します。
  • パーミッションが拒否されている:ユーザーが通知パーミッションを許可していることを確認します (Android 13 以上と全ての iOS バージョンで必要です)
  • トークンが更新されない:両方のプラットフォームでonTokenRefresh イベントを購読していることを確認してください。
  • データがない:デバイスがプラットフォーム要件を満たしているか確認する(Android 4.1+とGoogle Play Services、iOSとAPNsサポート
  • 設定エラー:アプリのSingularプラットフォーム設定でアンインストールトラッキングが有効になっていることを確認する。
  • Firebaseのセットアップ:Android の場合、google-services.json が正しい場所にあることを確認してください。iOSの場合は、GoogleService-Info.plist がXcodeプロジェクトに追加されていることを確認してください。

その他のリソース詳細なトラブルシューティングについては、Android Uninstall Tracking Setup GuideiOS Uninstall Tracking Setup GuideFirebase Messaging Plugin Documentation を参照してください。


ベストプラクティス

  • 早めにパーミッションをリクエストする:オンボーディング中、またはユーザーの価値が確立されたときに通知許可をリクエストする。
  • 拒否を潔く処理する:パーミッションが拒否された場合、明確なメッセージを提供し、ユーザーにメリットを説明する。
  • 両方のプラットフォームをテストする:異なるOSバージョンのAndroidとiOSの両方で実装が動作することを確認する。
  • トークン・リフレッシュを監視する:トークンの更新を自動的に処理するために、常にトークンリフレッシュリスナーを実装する。
  • デバッグのためのログ:トークンの生成と登録を追跡するために、開発中に詳細なロギングを有効にする。