iOSアンインストールトラッキングセットアップ
iOSのアプリのアンインストールをトラッキングして、ユーザーのリテンションを測定し、低品質なトラフィックソースを特定し、Singular SDKとApple Push Notificationサービス(APNs)の統合を使用してキャンペーンパフォーマンスを最適化します。
概要
アンインストールトラッキングの仕組み
Singularは、Appleプッシュ通知サービスを介してサイレントプッシュ通知を送信し、配信応答を監視してアプリがデバイスにインストールされたままかどうかを判断することで、iOSアプリのアンインストールを検出します。
技術的プロセス
- トークンの登録:Singular SDKがAPNsデバイストークンをSingularサーバーに登録します。
- ユーザーオプトイン:ユーザーはiOSのプロンプトに従ってプッシュ通知の許可を与えます。
- サイレント通知:Singularは登録されたデバイスにサイレントプッシュ通知を定期的に送信します。
- 配信フィードバック:APNが配信の成否を報告
- アンインストール検出:配信の失敗はアプリのアンインストールを示します。
- イベントの記録:アンインストールイベントを元のインストールソースに帰着
必要条件
- SDK バージョン:アンインストール追跡には iOS SDK 8.0+ が必要です。
- APN 証明書:AppleデベロッパーアカウントからのプロダクションSSL証明書
- プッシュ通知のサポート:アプリがAPN登録とトークン処理を実装していること
- ユーザーの同意:トラッキングを機能させるためには、ユーザーがプッシュ通知に同意する必要があります。
- アプリのアップデート:トラッキングのアンインストールを有効にして、アプリのアップデートバージョンをインストールする必要があります。
重要な考慮事項
ユーザーのオプトイン要件:Appleのポリシーに従い、ユーザーはプッシュ通知の受信を明示的にオプトインする必要があります。 Singularは、通知許可を与えたユーザーのアンインストールのみを追跡できます。
キーポイント
- サイレント通知:Singularのアンインストール追跡は、ユーザーに目に見えるアラートを表示しないサイレントプッシュ通知を使用しています。
- 属性の保持:アンインストールは、元の帰属リンクを削除することなくイベントとして追跡されます。ユーザーは複数回アンインストールして再インストールする可能性があり、その結果、アンインストール率が 100% を超える可能性があります。
- バッチ処理:アンインストールの検出はバッチベースで行われ、APN の応答フィードバックに依存します。アンインストールデータが Singular ダッシュボードに表示されるまで、最大 24 時間かかります。
- パーミッションの依存性:トラッキングカバレッジは、プッシュ通知のオプトイン率と直接相関しています。オプトイン率が低いアプリは、アンインストールデータが不完全になります。
- ネットワーク依存性:サイレントプッシュ通知には、アクティブなネットワーク接続が必要です。デバイスが長時間オフラインの場合、アンインストール検出が遅れる可能性があります。
セットアップ手順
Singular SDKの統合、Appleプッシュ通知の実装、SingularへのAPN証明書のアップロードにより、iOSのアンインストールトラッキングを設定します。
ステップ 1: iOS SDK 8.x+ を統合する。
SDKバージョンの更新
アンインストールトラッキング機能を有効にするには、iOS SDK 8.0以上にアップグレードしてください。
CocoaPodsのインストール:
platform :ios, '12.0'
use_frameworks!
target 'YourApp' do
# Singular iOS SDK
pod 'Singular-SDK', '~> 12.6.2'
end
Swiftパッケージマネージャ:
// File > Add Package Dependencies
// Enter repository URL:
https://github.com/singular-labs/Singular-iOS-SDK
// Select version: 12.6.2 or later
完全な統合ガイド:iOS SDK統合ガイド
ステップ2:Appleプッシュ通知の設定
プッシュ通知機能を有効にする
Xcodeプロジェクトにプッシュ通知機能を追加し、アプリにAPN登録を実装します。
Xcode の設定:
- プロジェクト設定を開きます:Xcode ナビゲータでプロジェクトを選択します。
- ターゲットを選択します:アプリのターゲットを選択
- 機能を追加する:Signing & Capabilities タブに移動します。
- プッシュを有効にする:"+ Capability "をクリックし、"Push Notifications "を追加する。
- バックグラウンド・モード:バックグラウンド・モード機能の「リモート通知」を有効にする。
初めてのセットアップiOSのプッシュ通知を初めて実装する場合は、包括的なAppleプッシュ通知サービス(APNs)セットアップガイドを参照してください。
APNs登録の実装
プッシュ通知に登録するコードを追加し、APNsデバイストークンをSingular SDKに渡します。
import UIKit
import UserNotifications
import Singular
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Request push notification permissions
requestPushNotificationPermissions()
// Initialize Singular SDK
let config = SingularConfig(apiKey: "SDK KEY", secret: "YOUR_SECRET")
Singular.start(config)
return true
}
func requestPushNotificationPermissions() {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
if granted {
print("Push notification permission granted")
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
} else {
print("Push notification permission denied")
}
}
}
// Called when APNs successfully registers device
func application(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// Pass token to Singular for uninstall tracking
Singular.registerDeviceToken(forUninstall: deviceToken)
// Convert token to hex string for logging
let tokenString = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
print("APNs device token registered: \(tokenString)")
}
// Called if APNs registration fails
func application(_ application: UIApplication,
didFailToRegisterForRemoteNotificationsWithError error: Error) {
print("Failed to register for remote notifications: \(error.localizedDescription)")
}
// Handle incoming push notifications
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// Pass notification data to Singular
Singular.handleNotification(userInfo)
completionHandler(.newData)
}
}
iOS 13以上の要件:iOS 13 以降では、認証を受けた後、メインスレッドでregisterForRemoteNotifications() を呼び出す必要があります。上記のようにDispatchQueue.main.async 。
完全実装ガイド:Singular iOS SDK実装ガイド
ステップ3:Appleプッシュ通知証明書の作成
APN SSL証明書を生成する
Singularがアンインストールトラッキング用のプッシュ通知を送信できるように、Apple DeveloperアカウントでプロダクションSSL証明書を作成します。
- Apple Developer Portal を開きます: Apple Developerに移動します。
- 証明書にアクセスします:証明書、識別子、プロファイルに移動します。
- Identifiers を選択します:左サイドバーの Identifiers をクリックします。
- App IDを選択します:リストからアプリの識別子を選択します。
- プッシュ通知を設定する:Application Services(アプリケーション・サービス)までスクロールし、Push Notifications(プッシュ通知)を探す。
- 証明書を作成する:プッシュ通知の横にある "Configure "をクリックする。
- タイプを選択します:プロダクション証明書の場合は、"Apple Push Notification service SSL (Sandbox & Production) "を選択します。
証明書タイプの要件:シングルアンインストールトラッキングには、本番アプリ用の本番用SSL証明書が必要です。開発用証明書は内部テストにのみ使用できます。
証明書署名要求(CSR)の作成
APNs証明書を作成するために、Mac上でCSRを生成します。
- キーチェーンアクセスを開くMacでKeychain Accessアプリを起動します。
- 証明書を要求する:キーチェーンアクセスメニュー → 証明書アシスタント → 認証局から証明書をリクエスト
- メールアドレスを入力メールアドレスを入力
- コモンネーム:説明的な名前を入力します(例:"YourApp Push Notifications")。
- Save to Disk(ディスクに保存Saved to disk "オプションを選択
- Continueをクリックします:ContinueをクリックしてCSRファイルを保存する
CSRのアップロードと証明書のダウンロード
CSRをApple Developerポータルにアップロードし、APNのSSL証明書を生成します。
- CSRをアップロードします:Apple Developerポータルで、作成したCSRファイルをアップロードします。
- 証明書を生成します:Continue(続行)をクリックして証明書を生成します。
- 証明書をダウンロードします:生成された.cerファイルをダウンロードする
- 証明書をインストールします:.cerファイルをダブルクリックしてMacのキーチェーンに追加します。
ステップ4:証明書を.p12ファイルとしてエクスポートする
キーチェーンからP12を生成する
APNの証明書と秘密鍵をKeychainから.p12ファイルとしてエクスポートし、Singularにアップロードします。
- キーチェーンアクセスを開きます:キーチェーンアクセスアプリを起動
- 証明書を選択します:My Certificates "カテゴリーでAPNs証明書を探す。
- 証明書を展開します:三角形をクリックして、証明書とペアになっている秘密鍵を表示します。
- 両方の項目を選択します:Commandキーを押しながら証明書と秘密鍵の両方をクリックして選択する。
- エクスポートする:右クリックし、"Export 2 items... "を選択する。
- P12として保存:.p12形式を選択し、意味のあるファイル名で保存する(例: "YourApp_APNs_Production.p12")。
- パスワードの設定:.p12ファイルを保護するためのパスワードを入力します(Singularにアップロードする際にこのパスワードが必要になります)。
- 確認します:OKをクリックしてファイルをエクスポートします。
セキュリティ上の注意:.p12ファイルは安全に保管し、パスワードは忘れないようにしてください。証明書をSingularにアップロードする際にこの両方が必要になります。これらの証明書を公開しないでください。
ステップ 5: 証明書をSingularにアップロードする
Singularアプリの設定
.p12証明書ファイルをSingularのアプリ設定にアップロードして、アンインストール追跡を有効にします。
- Singular Apps を開きます: Singular Apps ページに移動します。
- アプリを選択します:リストからiOSアプリを選択
- 詳細設定:詳細設定セクションまでスクロール
- トラッキングのアンインストール:アンインストール・トラッキング・コンフィギュレーションを探す
- 証明書をアップロードします:Choose File "をクリックし、.p12ファイルを選択します。
- Enter Password:.p12 ファイルをエクスポートする際に作成したパスワードを入力します。
- 設定を保存します:Save をクリックして設定を適用します。
検証:アップロード後、Singularが証明書を検証します。検証に失敗した場合は、本番用証明書を使用していることとパスワードが正しいことを確認してください。
アンインストールトラッキングのテスト
アップデートしたアプリを本番環境にリリースする前に、アンインストールトラッキングが正しく設定されていることを確認します。
テスト手順
検証ステップ
- テストビルドをインストールします:アンインストールトラッキングを有効にしたアプリをテストデバイスにデプロイします。
- 権限を付与します:アプリを起動し、プロンプトが表示されたら、プッシュ通知のアクセス許可を許可します。
- 登録を確認する:APNs デバイストークン登録メッセージの Xcode コンソールをチェックします。
- SDK 登録を確認します:SDKログにSingularへのトークン登録が成功していることを確認する。
- バッチ処理を待つ:Singular が最初のサイレント通知を送信するまで 24-48 時間待ちます。
- アプリをアンインストールします:テストデバイスからアプリを削除
- ダッシュボードを監視する:24~48時間後にSingularのダッシュボードでアンインストールイベントを確認する
テストタイムライン:アンインストール追跡はバッチベースであるため、アンインストールの検出と報告に最大 48 時間かかる場合があります。この遅延は予想される動作です。
Xcode コンソールの検証
適切な設定を確認する Singular SDK メッセージの Xcode コンソール出力を確認してください。
予想されるログメッセージ:
[Singular] APNs device token registered successfully
[Singular] Uninstall tracking enabled
[Singular] Device token sent to Singular servers
一般的な問題
| 問題 | 原因 | 解決方法 |
|---|---|---|
| プッシュ許可ダイアログが表示されない | 権限がすでに拒否されているか、要求されていない | 権限をリセットする:設定 → 一般 → iPhoneを転送またはリセット → リセット → 位置情報とプライバシーをリセット |
| デバイストークンが生成されない | プッシュ通知機能が有効になっていない | Xcode Signing & CapabilitiesでPush Notificationsが有効になっているか確認してください。 |
| 登録がエラーで失敗する | プロビジョニング・プロファイルがないか、間違っている | プロビジョニング・プロファイルが Push Notifications 権限を含んでいることを確認する。 |
| Singular で証明書の検証が失敗する | 証明書の種類が正しくないか、有効期限が切れている。 | プロダクションSSL証明書を使用しているか、有効期限が切れていないか確認してください。 |
| トークンが Singular に届かない | SDKが初期化されていないか、ネットワーク接続に問題がある | Singular.start()がregisterDeviceToken()の前にコールされていることを確認してください。 |
| アンインストールがダッシュボードに表示されない | ユーザーがプッシュ権限を付与していない | アンインストールのトラッキングは、通知をオプトインしたユーザーに対してのみ機能します。 |
シミュレータの制限
物理デバイスが必要APNs デバイストークンの生成は iOS シミュレータでは動作しません。物理的な iOS デバイスでアンインストールトラッキングをテストする必要があります。
プッシュ通知のオプトイン率の最適化
プッシュ通知の許可を与えるユーザーの割合を改善することで、アンインストールトラッキングのカバレッジを最大化します。
ベストプラクティス
許可前のプロンプト
iOS システムの許可ダイアログを表示する前に、カスタムアプリ内説明を表示して許可率を高めます。
- 価値を説明する:通知を有効にすることでユーザーが得られるメリットを明確に伝える。
- タイミング:ユーザーが価値を理解するタイミングで、コンテキストに関連した許可を要求する。
- カスタムUI:システムプロンプトの前に "許可 "ボタンと "今は許可しない "ボタンを備えたカスタムダイアログを表示する。
- 再試行のロジック:ユーザーが拒否した場合、アプリの価値を体験した後に再度プロンプトを表示
実装例
class NotificationManager {
func showPrePermissionPrompt() {
// Check if permission already requested
UNUserNotificationCenter.current().getNotificationSettings { settings in
if settings.authorizationStatus == .notDetermined {
DispatchQueue.main.async {
self.displayCustomPrompt()
}
}
}
}
private func displayCustomPrompt() {
let alert = UIAlertController(
title: "Stay Updated",
message: "Enable notifications to receive important updates about your orders and exclusive offers.",
preferredStyle: .alert
)
alert.addAction(UIAlertAction(title: "Enable Notifications", style: .default) { _ in
self.requestSystemPermission()
})
alert.addAction(UIAlertAction(title: "Not Now", style: .cancel) { _ in
// User declined - mark for retry later
UserDefaults.standard.set(Date(), forKey: "last_notification_prompt")
})
// Present from root view controller
UIApplication.shared.keyWindow?.rootViewController?.present(alert, animated: true)
}
private func requestSystemPermission() {
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
if granted {
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
}
}
}
}
コンテクスチュアル許可リクエスト
効果的なタイミング戦略
- 最初のトランザクションの後:ユーザーが最初の購入または意味のあるアクションを完了した後にリクエストする。
- 機能の紹介:通知依存の機能を紹介する際に促す
- 価値のデモンストレーション:ユーザーがアプリの価値を体験した後にリクエスト
- 初回起動を避ける:ユーザーがアプリの価値を理解する前に、アプリの初回起動時にリクエストしないこと
アンインストールデータの分析
iOSのアンインストールデータをSingularレポートで使用して、キャンペーンパフォーマンスを最適化し、トラフィックの質の問題を特定します。
利用可能なメトリクス
アンインストール追跡メトリクス
- アンインストール数:検出されたアプリのアンインストール総数
- アンインストール率:アンインストールに至ったインストールの割合
- トラッキング可能ユーザー率:プッシュ通知をオプトインしたユーザーの割合
- アンインストールまでの日数:インストールからアンインストールまでの平均時間
- ソース別のアンインストール数:キャンペーン、パブリッシャー、クリエイティブ別のアンインストールの内訳
- コホート分析:異なるユーザーコホート間のアンインストールパターン
カバレッジに関する考察
トラッキングカバレッジ:iOS のアンインストールトラッキングは、プッシュ通知の許可を与えたユーザーのみを対象としています。アプリの通知オプトイン率を監視して、アンインストールトラッキングのカバレッジ率を把握します。
カバレッジの計算:
Tracking Coverage % = (Users with Push Enabled / Total Installs) × 100
使用例
キャンペーンの最適化:
- アンインストール率の高い低品質トラフィックを促進するキャンペーンを特定します。
- 異なるトラフィックソース間でアンインストール率を比較
- 予測されるユーザー維持率に基づいて入札戦略を最適化します。
- クリエイティブなメッセージングを調整して、より質の高いユーザーを引き付けます。
不正の検出:
- インストール詐欺を示す異常なアンインストールパターンを検出
- アンインストール率が不審に高いパブリッシャーにフラグを立てる
- ボットトラフィックの兆候を示すアンインストールまでの時間を監視します。
- 迅速なアンインストールによるクリックインジェクションパターンの特定
ユーザー維持分析:
- 長期間にわたるアプリの定着度とエンゲージメントを追跡
- アプリの更新または機能リリースとアンインストールを関連付ける
- ユーザー離れの要因を特定
- ユーザー属性と行動によるアンインストール率のセグメント化
ベストプラクティス
最適化戦略
- ベンチマークを設定する:キャンペーンタイプごとに許容できるアンインストール率のしきい値を設定する
- 傾向の監視:アンインストール率を長期的に追跡し、季節的なパターンや異常を特定します。
- セグメント分析:ユーザー層、地域、デバイスのアンインストール率を比較します。
- アトリビューションウィンドウ:キャンペーンのパフォーマンスを評価する際にアンインストールのタイミングを考慮します。
- 品質スコアリング:アンインストール率をトラフィック品質スコアリングモデルに組み込む
- カバレッジトラッキング:通知オプトイン率を監視してデータの完全性を把握する
- 比較分析:プラットフォーム固有の洞察のために iOS と Android のアンインストールパターンを比較します。