Xcodeで開発中のiOSアプリでFirebase Cloud Messaging(FCM)を利用している場合、実機ビルド版では通知が届くのに、TestFlight版だけ通知を受信できないケースがあります。この問題はAPNs証明書やBundle ID、Firebase設定の不一致が原因になっていることが多く、特に本番環境と開発環境の違いを理解することが重要です。この記事では、TestFlight版だけ通知が届かない場合の代表的な原因と対処法をまとめます。
TestFlight版は「本番APNs」で動作する
まず重要なのが、TestFlightで配布したアプリは「開発環境」ではなく「本番環境(Production APNs)」として扱われる点です。
Xcodeから直接ビルドした実機アプリはSandbox APNsを使用しますが、TestFlight版はProduction APNsを使用します。そのため、Firebase側に開発用APNsキーしか登録されていない場合、TestFlight版へ通知が届きません。
Firebase ConsoleのAPNs設定を確認する
Firebase ConsoleでAPNs認証キーが正しく設定されているか確認してください。
- Firebase Console → プロジェクト設定 → Cloud Messaging
- Apple app configurationのAPNs Authentication Keyを確認
- .p8キー、Key ID、Team IDが正しいか確認
特に古い証明書方式を使用している場合、Production証明書が不足しているケースがあります。
Bundle Identifierの不一致を確認
TestFlight版とXcode実機版でBundle IDが一致しているか確認しましょう。
例えばDebug用とRelease用でBundle Identifierが異なる場合、Firebase側で別アプリとして認識されることがあります。
| 確認項目 | 例 |
|---|---|
| Debug | com.sample.app.dev |
| Release/TestFlight | com.sample.app |
Release用GoogleService-Info.plistが正しいかも確認してください。
Push Notifications Capabilityの確認
Signing & Capabilitiesで以下が有効になっているか確認します。
- Push Notifications
- Background Modes → Remote notifications
これらがDebugだけでなくRelease設定にも適用されている必要があります。
FCMトークンが取得できているか確認
TestFlight版でFCMトークン取得に失敗しているケースもあります。
App起動時に以下のようなログを確認してください。
- didRegisterForRemoteNotificationsWithDeviceToken
- Messaging.messaging().token
TestFlight版だけtokenが空になる場合は、APNs設定またはProvisioning Profileに問題がある可能性があります。
Provisioning Profileの確認
Apple Developer側でPush Notificationsが有効なProvisioning Profileを使用しているか確認してください。
古いProfileを使用している場合、Push権限が反映されていないことがあります。一度Profileを再生成して再ビルドすると改善することがあります。
Firebaseキャンペーン通知特有の注意点
Firebase Consoleの「Messagingキャンペーン」は、AnalyticsやFCM登録状況によって配信対象が変わる場合があります。
- Analytics有効化確認
- 通知許可ダイアログの許可確認
- Audience条件の確認
単純なFCMトークン送信では届くのに、キャンペーンだけ届かない場合はAudience設定の問題も疑いましょう。
よくある改善手順
- FirebaseのAPNsキーを再登録
- Provisioning Profile再生成
- ReleaseビルドでPush Capability確認
- GoogleService-Info.plistをRelease用へ差し替え
- TestFlight版を削除して再インストール
特に「削除→再インストール」でFCMトークンが正常化することがあります。
まとめ
Xcode実機版では通知が届くのにTestFlight版だけ届かない場合、多くは「Sandbox APNs」と「Production APNs」の違いが原因です。FirebaseのAPNs設定、Provisioning Profile、Bundle ID、FCMトークン取得状況を順番に確認することで改善できるケースが非常に多いです。特にTestFlightは本番環境扱いになる点を意識して設定を見直すことが重要です。


コメント