トラブルシューティング
この記事では、Swift SDKに関するiOSプッシュのトラブルシューティングのシナリオをいくつか紹介する。
Braze/APNs のワークフローについて
Apple プッシュ通知サービス (APN) は、Apple のプラットフォームで実行されているアプリケーションへのプッシュ通知を送信するためのインフラです。ユーザーのデバイスに対してプッシュ通知を有効にする方法と、Braze がユーザーにプッシュ通知を送信する方法の簡単な構造を次に示します。
- プッシュ証明書とプロビジョニングプロファイルを構成します
- デバイスは APNs に登録し、Braze にプッシュトークンを提供します
- Braze プッシュキャンペーンを開始します
- Braze は無効なトークンを削除します
ステップ1:プッシュ証明書とプロビジョニングプロファイルの構成
アプリの開発では、プッシュ通知を有効にするには SSL 証明書を作成する必要があります。この証明書はアプリのビルドに使用されるプロビジョニングプロファイルに含まれ、Braze ダッシュボードにアップロードする必要もあります。証明書を使用すると、、Braze は APNs に対して、あなたに代わってプッシュ通知を送信することが許可されていることを伝えることができます。
プロビジョニングプロファイルと証明書には、開発と配布の2つのタイプがあります。混乱を避けるために、配布プロファイルと証明書だけを使用することをお勧めします。開発と配布で異なるプロファイルと証明書を使用することを選択した場合は、ダッシュボードにアップロードされた証明書が現在使用しているプロビジョニングプロファイルと一致することを確認してください。
プッシュ証明書の環境 (開発環境と本番環境) を変更しないでください。プッシュ証明書を間違った環境に変更すると、ユーザーのプッシュトークンが誤って削除され、プッシュで到達できなくなる可能性があります。
ステップ 2:デバイスは APNs に登録し、Braze にプッシュトークンを提供します
ユーザーがアプリを開くと、プッシュ通知を受け入れるように求められます。このプロンプトを受け入れると、APNs はその特定のデバイスのプッシュトークンを生成します。Swift SDK は、デフォルトの自動フラッシュポリシー を使用して、アプリのプッシュトークンを直ちに非同期に送信します。ユーザーにプッシュトークンを関連付けると、[エンゲージメント] タブのユーザープロファイルのダッシュボードに「プッシュ登録済み」と表示され、Braze キャンペーンからプッシュ通知を受け取る資格が得られます。
macOS 13から、一部のデバイスでは、Xcode 14上で動作するiOS 16シミュレーターでプッシュ通知をテストできるようになった。詳細については、Xcode 14 リリース ノートを参照してください。
ステップ3: Braze プッシュキャンペーンの開始
プッシュキャンペーンが開始されると、Braze は APNs にメッセージの配信リクエストを行います。Braze は、ダッシュボードにアップロードされた SSL プッシュ証明書を使用して認証を行い、提供されたプッシュトークンへのプッシュ通知の送信が許可されていることを確認します。デバイスがオンラインの場合は、キャンペーンが送信された後すぐに通知が受信されます。なお、Braze は通知のデフォルトの APNs 有効期限を30日に設定していることに注意してください。
ステップ4: 無効なトークンを削除する
APNs が、メッセージを送信しようとしていたプッシュトークンのいずれかが無効であることを通知した場合、それらのトークンは関連付けられたユーザープロファイルから削除されます。
プッシュのエラーログを使う
Message Activity Log を使用すると、キャンペーンや送信に関連付けられているメッセージ(特にエラーメッセージ) を確認できます。これには、プッシュ通知エラーも含まれます。このエラーログは、キャンペーンが期待どおりに機能していない理由を特定するのに非常に役立つさまざまな警告を提供します。エラーメッセージをクリックすると、特定のインシデントのトラブルシューティングに役立つ関連ドキュメントにリダイレクトされます。
ここに表示される一般的なエラーには、“Received Unregistered Sending to Push Token” などのユーザー固有の通知が含まれます。
さらに、Braze は [エンゲージメント] タブのユーザープロファイルにプッシュ通知の変更ログも提供します。この変更ログは、トークンの無効化、プッシュ登録エラー、トークンの新規ユーザーへの移動などのプッシュ登録動作に関するインサイトを提供します。
メッセージ・アクティビティ・ログのエラー
プッシュトークン {#received-unregistered-sending} への未登録送信を受信した
- メソッド
AppDelegate.braze?.notifications.register(deviceToken:)
から Braze に送信されているプッシュトークンが有効であることを確認してください。メッセージアクティビティログを見ると、プッシュトークンを確認できます。これは6e407a9be8d07f0cdeb9e724733a89445f57a89ec890d63867c482a483506fa6
のようになり、文字と数字が混在する長い文字列になります。プッシュトークンが異なるように見える場合は、code でプッシュトークンを送信するかどうかを確認します。 - プッシュプロビジョニングプロファイルがテスト対象の環境と一致することを確認します。ユニバーサル証明書は、開発または実稼働の APNs 環境のいずれかに送信するように Braze ダッシュボードで構成できます。実稼働アプリ用の開発証明書または開発アプリ用の実稼働証明書は動作しません。
- Braze にアップロードしたプッシュトークンが、プッシュトークンの送信元のアプリのビルドに使用したプロビジョニングプロファイルと一致することを確認します。
デバイストークンがトピック用ではない
このエラーは、アプリのプッシュ証明書とバンドル ID が一致しないことを示しています。Brazeにアップロードしたプッシュ証明書が、プッシュトークンの送信元となるアプリのビルドに使用したプロビジョニングプロファイルと一致することを確認します。
プッシュトークンへの BadDeviceToken の送信
BadDeviceToken
は APNs のエラーコードであり、Braze から発信されたものではありません。この応答が返されるには、次のようなさまざまな理由が考えられます。
- アプリは、ダッシュボードにアップロードされた認証情報に対して無効なプッシュトークンを受け取った。
- このワークスペースではプッシュが無効になった。
- ユーザーがプッシュをオプトアウトした。
- アプリがアンインストールされた。
- Apple がプッシュトークンを更新したため、古いトークンが無効になった。
- アプリは本番環境用にビルドされていますが、Braze にアップロードされたプッシュ認証情報は開発環境用に設定されます (または逆の場合もあります)。
プッシュ登録に関する問題
プッシュ登録プロンプトが表示されない
アプリケーションでプッシュ通知の登録を求めるメッセージが表示されない場合は、プッシュ登録の統合に問題がある可能性があります。documentationに従っており、プッシュ登録が正しく統合されていることを確認してください。コードにブレークポイントを設定して、プッシュ登録コードを確実に実行することもできます。
ダッシュボードに「プッシュ登録」されたユーザーが表示されない(メッセージ送信前)
アプリがプッシュ通知を許可するように正しく構成されていることを確認してください。チェックすべき一般的な障害点は次のとおりです。
- アプリがプッシュ通知を許可するように求めるメッセージを表示していることを確認します。通常、このプロンプトはアプリを初めて起動したときに表示されますが、他の場所に表示されるようにプログラムすることもできます。表示されるべき場所に表示されない場合は、アプリのプッシュ機能の基本構成に問題がある可能性があります。
- push integrationの手順が正常に完了したことを確認します。
- アプリのビルドに使用されたプロビジョニングプロファイルにプッシュの権限が含まれていることを確認します。Apple 開発者アカウントから利用可能なプロビジョニングプロファイルをすべてプルダウンしていることを確認してください。これを確認するには、次の手順を実行します。
- Xcodeで、[環境設定] > [アカウント] に移動します (または、キーボードショートカットコマンド+, を使用します)。
- 開発者アカウントに使用する Apple ID を選択し、[詳細を表示] をクリックします。
- 次のページで、[更新] をクリックし、使用可能なすべてのプロビジョニングプロファイルをプルしていることを確認します。
- アプリで適切に有効なプッシュ機能があることを確認します。
- プッシュプロビジョニングプロファイルがテスト環境と一致することを確認します。ユニバーサル証明書は、開発または実稼働の APNs 環境のいずれかに送信するように Braze ダッシュボードで構成できます。実稼働アプリ用の開発証明書または開発アプリ用の実稼働証明書は動作しません。
- コードにブレークポイントを設定して、
registerPushToken
メソッドを呼び出していることを確認します。 - デバイスを使ってテストし(プッシュはシミュレーターでは機能しない)、ネットワーク接続が良好であることを確認する。
プッシュ通知は送信されたが、ユーザーのデバイスに表示されない
「プッシュ登録済み」ユーザーがメッセージ送信後に有効でなくなる
これは、ユーザーが無効なプッシュトークンを持っていたことを示している可能性があります。これにはいくつかの理由が考えられます。
ダッシュボードとアプリ証明書が一致していない
ダッシュボードでアップロードしたプッシュ証明書が、アプリのビルドに使用したプロビジョニングプロファイルのものと異なる場合、APNs はトークンを拒否します。別のテスト通知を試みる前に、正しい証明書をアップロードし、アプリで別のセッションを完了していることを確認します。
アプリケーションがアンインストールされた
ユーザーがアプリケーションをアンインストールした場合、プッシュトークンは無効となり、次回の送信時に削除されます。
プロビジョニングプロファイルの再生成
最後の手段として、最初からやり直してまったく新しいプロビジョニングプロファイルを作成すると、複数の環境、プロファイル、およびアプリを同時に操作することによって発生する構成エラーを解消できます。プッシュ通知の設定には多くの “動く部分 “があるので、最初からやり直した方がいい場合もある。また、トラブルシューティングを続ける必要がある場合は、問題を切り分けるのに役立ちます。
「プッシュ登録された」ユーザーに配信されないメッセージ
アプリがフォアグラウンドにある
UserNotifications
フレームワークを介してプッシュを統合していない iOS バージョンでは、プッシュメッセージの受信時にアプリがフォアグラウンドにある場合、そのメッセージは表示されません。テストメッセージを送信する前に、テストデバイスでアプリをバックグラウンドにする必要があります。
テスト通知のスケジュールが正しくない
テストメッセージに設定したスケジュールを確認します。ローカルタイムゾーン配信またはインテリジェントタイミングに設定されている場合、メッセージがまだ受信されていない (または受信時にアプリをフォアグラウンドにしていた) だけかもしれません。
テスト対象のアプリに対してユーザーが「プッシュ登録」されていない
テストメッセージを送信しようとしてしている相手のユーザーのプロファイルを確認します。[エンゲージメント] タブの下に「プッシュ可能なアプリ」のリストがあるはずです。テストメッセージを送信しようとしているアプリがこのリストにあることを確認します。ユーザーがワークスペース内の任意のアプリのプッシュトークンを持っている場合は「プッシュ登録済み」と表示されるため、誤検知の可能性があります。
以下は、プッシュ登録に問題があるか、プッシュ後にユーザーのトークンが APNs によって無効として Braze に返されたことを示します。
プッシュクリックが記録されない
- プッシュ積分ステップに従っていることを確認します。
- Braze では、フォアグラウンドでサイレント受信したプッシュ通知 (
UserNotifications
フレームワーク以前のデフォルトのフォアグラウンドプッシュ動作) は処理されません。つまり、リンクは開かれず、プッシュクリックも記録されない。アプリケーションがUserNotifications
フレームワークをまだ統合していない場合、アプリケーション状態がUIApplicationStateActive
のときに Braze はプッシュ通知を処理しません。アプリがpush 処理メソッド への呼び出しを遅延しないようにします。遅延しない場合、Swift SDK はプッシュ通知をサイレントフォアグラウンドプッシュイベントとして扱い、処理しないことがあります。
ディープリンクが機能しない
プッシュクリックからのWebリンクが開かない
プッシュ通知のリンクは、Web ビューで開くには ATS 準拠である必要があります。WebリンクがHTTPSを使用していることを確認します。詳細については、ATS 準拠 の記事を参照してください。
プッシュクリックからディープリンクが開かない
ディープリンクを扱うコードのほとんどはプッシュ通知の開封も扱います。まず、プッシュ通知の開封がログに記録されていることを確認します。そうでない場合は、問題を修正します(多くの場合、修正によりリンク処理が修正されます)。
開封が記録されている場合は、ディープリンク全般の問題なのか、ディープリンクのプッシュクリック処理の問題なのかを確認してください。そのためには、アプリ内メッセージクリックからのディープリンクが機能するかテストします。