Azure Notification Hubs を介した iOS および Android デバイスへのプッシュ通知の実装は (ほぼ) 成功しています。
問題は、一部の iOS デバイスが Azure Notification Hubs によって送信された通知をまったく受信していないように見えることです。
テンプレートとタグを使用して、メッセージを適切なデバイスに送信します。タグはインタレスト トピックであり、ユーザー固有のものではありません。そのため、そのタグをサブスクライブしているすべてのデバイスに、そのタグに関する 1 つの通知がプッシュされることを期待しています。
Android デバイスは問題なく通知を受信しているように見えますが、iOS デバイスは一貫していません。それらのほとんどは機能します。カップルはしません。
プッシュ通知は最善を尽くして配信されるものであり、信頼性を保証するものではないことは十分承知していますが、限られたテストの結果、プッシュ通知の受信に一貫して失敗するデバイスの数が、不合理と思われるよりも多いことが明らかになりました (約 12 個のデバイスで 2 回以上の失敗)。
セットアップは次のとおりです。
バックエンドには、Azure Notification Hubs に接続して Azure に通知を送信する単純な C# ルーチンがあります。
var outcome = await hub.SendTemplateNotificationAsync(properties, tag);
この方法を使用して、GetAllRegistrationsAsync
チェックしているすべてのデバイスが正常に登録され、正しいテンプレートを使用していることを確認しました。すべてのデバイスが登録されており、すべてのテンプレートが正しいです。
「テストモード」ではありません。のenableTestSend
パラメーターがNotificationHubClient.CreateClientFromConnectionString
False に設定されています。
トラブルシューティング:
通知を送信すると、ほとんどのデバイスが通知を受信し、テスト中の特定のケースでは、バッジ カウンターを正しい数で更新します。
ただし、いくつかのデバイスでは通知が届かないようです。デバイスを再起動した後、デバイスの 1 つが通知を受け取りましたが、その後停止しました。
上記のGetAllRegistrationsAsync
方法を使用して、問題のあるデバイスが Azure に正しく登録され、正しいタグとテンプレートがあることを確認しました。
Azure の登録から、問題のあるデバイスのデバイス トークンを特定できました。APNS と直接通信する PHP スクリプトを使用して、デバイス トークンを使用して問題のあるデバイスだけに通知を送信しました。毎回、デバイスはこの直接送信通知を受け取ります。信頼できないのは Azure からの通知だけです。
Azure Notification Hub モニター ページを調べると、過去 24 時間の次のメトリックが表示されます。
- 967 APNS 成功通知
- 3 APNS 不良チャネル エラー
- 2 APNS 期限切れチャネル エラー
- 4 APNS エラー
...そして、APNSまたはAzureについて一般的に報告された他のエラーはありません。表示されている失敗率は、エラー数が 20 を超えているはずです。
エラーの原因となったデバイス トークンを特定できませんでした。この情報を Azure から取得する方法はありますか?
APNS 自体を介してこれらのデバイスに通知を直接送信できるが、Azure を介しては送信できない理由と、Azure が実際よりも多くのエラーを報告しない理由を説明できません。
提案や洞察はありますか?