7

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.CreateClientFromConnectionStringFalse に設定されています。

トラブルシューティング:

通知を送信すると、ほとんどのデバイスが通知を受信し、テスト中の特定のケースでは、バッジ カウンターを正しい数で更新します。

ただし、いくつかのデバイスでは通知が届かないようです。デバイスを再起動した後、デバイスの 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 が実際よりも多くのエラーを報告しない理由を説明できません。

提案や洞察はありますか?

4

1 に答える 1

7

データベースにサンドボックス デバイス トークンが含まれている可能性は十分にあります (デバイス トークンがサーバーに保存されているか、Azure Notification Hub に保存されているかはわかりません)。サンドボックス デバイス トークンを含む通知を本番プッシュ環境に送信しようとすると、Apple から InvalidToken エラーが返され、接続が閉じられます。

多くの場合、Apple の APN サーバーにプッシュ通知を送信するサーバーがエラー応答を受け取るまでに、サーバーは (おそらく有効なトークンを使用して) さらに多くの通知を送信しており、それらはすべて Apple によって破棄されます。この時点で、新しい通知は APNS との新しい接続が確立された後にのみ Apple によって受け入れられるため、無効なトークンの後に古い接続に送信されたメッセージは再送信する必要があります。Azure がこの再送信を正しく処理しない可能性があります。

おっしゃるとおり、Azure Notification Hub Monitor ページにいくつかのエラーが表示されます。3 APNS Bad Channel Errorsこれは、デバイス トークンが無効であることを意味していると思われます。DB に実際にいくつの無効なデバイス トークンがあるかはわかりませんが、1 つでも有効なトークンを含む多くの通知が Apple に受け入れられない可能性があります。

最善の解決策は、DB 内のすべてのデバイス トークンをテストし、無効なものを特定して削除することです。

于 2014-07-03T01:12:56.660 に答える