一般的な問題とバグの報告

ウェブプッシュで問題が発生すると、問題のデバッグや ヘルプをご覧ください。このドキュメントでは、いくつかの一般的な問題と、 Chrome や Firefox にバグが見つかった場合に実行する手順です。

push のデバッグについて説明する前に、デバッグで問題が発生する可能性があります。 Service Worker 自体、ファイルが更新されない、登録に失敗する、 検出します。こちらの Service Worker のデバッグに関する優れたドキュメント Chronicle を初めて使用する場合は、 Service Worker で開発されました。

ウェブプッシュの開発とテストでは、2 つの異なるステージをチェックする必要があります。 それぞれに一般的な問題 / 問題があります。

  • メッセージの送信: メッセージの送信が成功したことを確認します。 201 HTTP コードが表示されるはずです。上記に該当しない場合 : <ph type="x-smartling-placeholder">
  • メッセージの受信: メッセージを正常に送信できる場合は、 ブラウザでメッセージは受信されません。 <ph type="x-smartling-placeholder">

プッシュ メッセージを送受信できない場合と、 問題のデバッグに役立たない場合は push メカニズム自体にバグがあります。この場合は、このモジュールの バグレポートの提出 セクションに記入し、迅速に対応するために必要な情報がすべて記載された適切なバグレポートを提出します。 バグ修正プロセスに進みます

始める前に、Firefox と Mozilla AutoPush Service には、わかりやすいエラー メッセージがあります。行き詰まったときに 原因が不明な場合は、Firefox でテストして、 より有用なエラー メッセージが表示されます。

承認に関する問題

承認に関する問題は、デベロッパーが対処する際に まずはウェブプッシュですこの問題は通常、VM の構成上の サイトのアプリケーション サーバー キー(VAPID キー)

Firefox と Chrome の両方でプッシュをサポートする最も簡単な方法は、 subscribe() 呼び出しで applicationServerKey。マイナス面は フロントエンドとサーバーのキーに不一致があると、 承認エラーになります。

Chrome と FCM の場合

FCM を push サービスとして使用する Chrome では、 さまざまな FCM からの UnauthorizedRegistration レスポンス すべてアプリケーション サーバーのキーに関連するエラーです。

次のいずれかで UnauthorizedRegistration エラーが発生します。 次のような状況になります。

  • FCM へのリクエストで Authorization ヘッダーを定義できない場合。
  • ユーザーの登録に使用されたアプリケーション キーが、使用されているキーと一致しません Authorization ヘッダーに署名します。
  • JWT で有効期限が無効です。つまり、有効期限が 24 時間を超えている、または JWT の有効期限が切れています。
  • JWT の形式が正しくないか、JWT の値が無効です。

完全なエラー レスポンスは次のようになります。

<html>
  <head>
    <title>UnauthorizedRegistration</title>
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <h1>UnauthorizedRegistration</h1>

    <h2>Error 400</h2>
  </body>
</html>

Chrome でこのエラー メッセージが表示された場合は、Firefox でテストして、 問題に関する詳しい分析情報が得られるかもしれません。

Firefox および Mozilla AutoPush

Firefox と Mozilla AutoPush には、エラー メッセージがわかりやすく Authorization 件の問題。

また、以下から Unauthorized エラー レスポンスも受け取ります。 Mozilla AutoPush(プッシュに Authorization ヘッダーが含まれていない場合) リクエストできます。

{
  "errno": 109,
  "message": "Request did not validate missing authorization header",
  "code": 401,
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "error": "Unauthorized"
}

JWT の有効期限が過ぎている場合は、 Unauthorized エラーと、トークンに次のトークンが含まれていることを説明するメッセージ 期限切れになりました。

{
  "code": 401,
  "errno": 109,
  "error": "Unauthorized",
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "message": "Request did not validate Invalid bearer token: Auth expired"
}

ユーザーが 登録され、Authorization ヘッダーが署名されると、Not Found 次のエラーが返されます。

{
  "errno": 102,
  "message": "Request did not validate invalid token",
  "code": 404,
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "error": "Not Found"
}

最後に、JWT に無効な値がある場合(たとえば、「alg」値に 予期しない値だった場合は、Mozilla から次のエラーが表示されます。 AutoPush:

{
  "code": 401,
  "errno": 109,
  "error": "Unauthorized",
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "message": "Request did not validate Invalid Authorization Header"
}

HTTP ステータス コード

さまざまな問題によって、サーバーから 201 以外のレスポンス コードが返される可能性があります。 使用できます。以下に、HTTP ステータス コードとその意味の一覧を示します。 あります。

ステータス コード 説明
429 リクエスト数が多すぎます。アプリケーション サーバーがレート制限に達しました。 使用できます。サービスからのレスポンスに「Retry-After」が含まれているはずです。ヘッダーを 別のリクエストを実行できるまでの時間を指定します。
400 無効なリクエストです。いずれかのヘッダーが無効であるか、 見落とされがちです。
404 見つかりませんでした。この場合、ストレージから PushSubscription を削除し、 ユーザーが再度登録できるようになるまでお待ちください。
410 なくなった。サブスクリプションが無効になったため、サブスクリプションから削除してください バックエンドですこの問題は、 `PushSubscription`.
413 ペイロード サイズが大きすぎます。push サービスに必要な最小サイズのペイロード 4,096 バイト(4 KB)です。これより大きい値を指定すると、このエラーが発生します。

HTTP ステータス コードがこのリストになく、エラー メッセージが 詳細については、ウェブプッシュ プロトコル 仕様を参照し、 そのステータス コードがいつ使用可能になるのかを示すシナリオとともに、 使用できます。

ペイロードの暗号化に関する問題

プッシュ メッセージを正常にトリガーできる場合(つまり、ウェブ 201 レスポンス コードを受け取る)であっても、push イベントは これは通常、ブラウザがエラーに 受信したメッセージを復号します。

その場合は、Firefox の DevTools にエラー メッセージが表示されます。 変更します。

復号メッセージが表示された Firefox DevTools

Chrome でこの問題が発生しているかどうかを確認するには、次の手順を行います。

  1. about://gcm-internals にアクセスして [Start Recording] をクリックし、] ボタンを離します。

Chrome GCM 内部レコード。

  1. push メッセージをトリガーし、「Message Decryption Failure Log」を調べます。

GCM 内部の復号ログ。

ペイロードの復号に問題がある場合は、エラーが表示される 例を示します。(AES-GCM decryption failed メッセージが表示されます)。

この問題が発生している場合、暗号化のデバッグに役立つツールをいくつか紹介します。

接続の問題

Service Worker で push イベントを受信しておらず、 復号エラーが表示された場合は、ブラウザが push サービスを使用します

Chrome では、ブラウザがメッセージを受信しているかどうかを確認するには、 'メッセージログの受信'(sic)about://gcm-internals

GCM の内部はメッセージログを受信します。

メッセージがタイムリーに届かない場合は、 ブラウザの接続ステータスが CONNECTED です。

GCM の接続状態。

[接続済み] でない場合は、現在のプロフィールを削除して 新規作成してください。もしそうなら で問題が解決しない場合は、以下の手順に沿ってバグレポートを提出してください。

バグレポートを生成中

上記のいずれの方法も問題を解決できず、 問題が発生している可能性があります。使用しているブラウザに関する問題を提起してください 以下に関する問題:

Chrome の場合は、次の場所で問題を報告します。 https://bugs.chromium.org/p/chromium/issues/list Firefox の場合は、次の場所で問題を報告する必要があります。 https://bugzilla.mozilla.org/

適切なバグレポートを提供するには、次の詳細情報をご提供ください。

  • テストに使用したブラウザ(Chrome バージョン 50、Chrome バージョン 51、Firefox など) Firefox バージョン 51 など)に対応しています。
  • 問題を示す PushSubscription の例。
  • リクエストの例(つまり、ネットワーク リクエストのコンテンツを push や 。
  • ネットワーク リクエストからのサンプル レスポンスもすべて含めてください。

再現可能なサンプル(ソースコードまたはホストされているウェブ)をご提供いただける場合は、 多くの場合、問題の診断と解決がスピードアップします。

次のステップ

Codelab