情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 の プッシュ通知サービス応答コード

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

クラウド サービスがプッシュ通知を Microsoft Push Notification Service に送信した後、クラウド サービスはさまざまな応答コードのいずれかを受信し、その中にはカスタム ヘッダーが含まれている場合もあります。

重要:重要:

Windows Phone の Microsoft Push Notification Service は、サードパーティの開発者に、クラウド サービスから Windows Phone アプリに効率的にデータを送信するチャネルを提供する、非同期の最適なサービスです。

このトピックは、次のセクションで構成されています。

Microsoft Push Notification Service からの応答の形式は次のとおりです。

HTTP/1.1 [error code] [error text] 
Date: [HTTP-date]
[Custom HTTP Headers]

[error code]

3 桁のエラー コード。下記のエラー コード一覧を参照してください。

[error text]

エラーの説明。

[Custom HTTP Headers]

カスタム HTTP ヘッダーについては後で定義します。

次の表で、クラウド サービスに返される可能性のあるエラーおよびエラー以外の応答コードについて説明します。応答コードは、デバイスがメッセージを受信したことを示すものではありません。サーバーが通知を受信し、次に可能なときにデバイスに配信されるようにキューに格納したことだけを示します。

応答コード

通知の状態

デバイスの接続状態

サブスクリプションの状態

Comments (コメント)

200 OK

Received (受信)

Connected (接続)

Active (アクティブ)

通知要求が受け入れられ、配信待ちのキューに配置されました。デバイスが現在、Temp Disconnected (一時的に接続解除) 状態に移行している場合であっても、サーバーはこのステータスで応答することがあります。これは、デバイスが Temp Disconnected (一時的に接続解除) 状態から戻るまで通知が配信されないことを意味します。

200 OK

Received (受信)

Temp Disconnected (一時的に接続解除)

Active (アクティブ)

通知要求が受け入れられ、配信待ちのキューに配置されました。ただし、デバイスは一時的に切断されています。詳細については、「Temp Disconnected (一時的に接続解除) 状態の概要」を参照してください。

200 OK

QueueFull (キューがいっぱい)

Connected (接続)

Active (アクティブ)

サーバーは各 URI について (型に関係なく) 最大 30 の通知を保持します。 30 の制限数に到達すると、サーバーに送信された新規メッセージはすべて、デバイスが再接続されキューをフラッシュできるようになるまで、サーバーに送信された新規メッセージはすべて破棄されます。

200 OK

QueueFull (キューがいっぱい)

Temp Disconnected (一時的に接続解除)

Active (アクティブ)

サーバーは各 URI について (型に関係なく) 最大 30 の通知を保持します。 30 の制限数に到達すると、サーバーに送信された新規メッセージはすべて、デバイスが再接続されキューをフラッシュできるようになるまで、サーバーに送信された新規メッセージはすべて破棄されます。

200 OK

Suppressed (中止)

Connected (接続)

Active (アクティブ)

プッシュ通知は Push Notification Service によって受信された後、ドロップされました。Suppressed (中止) ステータスが発生するのは、アプリケーションがフォアグラウンドでないときに Raw 通知が送信されたり、アプリケーション用のタイルが開始に固定されていないときにタイル通知が送信されたりした場合、BindToShellTile または BindToShellToast を呼び出すことによって通知型が有効にされていない場合です。

200 OK

Suppressed (中止)

Temp Disconnected (一時的に接続解除)

Active (アクティブ)

プッシュ通知は Push Notification Service によって受信された後、ドロップされました。Suppressed (中止) ステータスが発生するのは、アプリケーションがフォアグラウンドでないときに Raw 通知が送信されたり、アプリケーション用のタイルが開始に固定されていないときにタイル通知が送信されたりした場合、BindToShellTile または BindToShellToast を呼び出すことによって通知型が有効にされていない場合です。

400 BadRequest

N/A

N/A

N/A

このエラーは、クラウド サービスが不正な XML ドキュメントまたは無効な形式の通知 URI を使用して通知要求を送信した場合に発生します。

401 Unauthorized

N/A

N/A

N/A

この通知の送信は許可されていません。このエラーは、次のいずれかの理由で発生する場合があります。

  • クラウド サービスの証明書のサブジェクト名と、Push Notification Service の証明書のサブジェクト名が一致していません。

  • トークンが変更されています。

  • トークンがそのサブスクリプションに対して有効ではありません。

404 Not Found

Dropped (ドロップ)

Connected (接続)

Expired (期限切れ)

サブスクリプションは無効で、Push Notification Service 上に存在しません。クラウド サービスによるこのサブスクリプションへの新しい通知の送信は停止され、対応するアプリケーション セッションのサブスクリプション状態はドロップされます。

404 Not Found

Dropped (ドロップ)

Temp Disconnected (一時的に接続解除)

Expired (期限切れ)

サブスクリプションは無効で、Push Notification Service 上に存在しません。クラウド サービスによるこのサブスクリプションへの新しい通知の送信は停止され、クライアントのサブスクリプション状態はドロップされます。

404 Not Found

Dropped (ドロップ)

Disconnected (切断)

Expired (期限切れ)

サブスクリプションは無効で、Push Notification Service 上に存在しません。クラウド サービスによるこのサブスクリプションへの新しい通知の送信は停止され、クライアントのサブスクリプション状態はドロップされます。

405 Method Not Allowed

N/A

N/A

N/A

無効なメソッド (PUT、DELETE、CREATE)。通知要求を送信するときは、POST だけが許されます。

406 Not Acceptable

Dropped (ドロップ)

Connected (接続)

Active (アクティブ)

認証されていないクラウド サービスがサブスクリプションの 1 日あたりのスロットル制限に達した場合または (認証の有無に関係なく) クラウド サービスから 1 秒間に送信された通知の数が多すぎる場合に、このエラーが発生します。クラウド サービスは、このエラーを受け取った後、1 時間おきにプッシュ通知の再送信を試みることができます。通常の通知フローが再開されるまで、24 時間ほど待たなければならない場合があります。

406 Not Acceptable

Dropped (ドロップ)

Temp Disconnected (一時的に接続解除)

Active (アクティブ)

認証されていないクラウド サービスがサブスクリプションの 1 日あたりのスロットル制限に達した場合または (認証の有無に関係なく) クラウド サービスから 1 秒間に送信された通知の数が多すぎる場合に、このエラーが発生します。クラウド サービスは、このエラーを受け取った後、1 時間おきにプッシュ通知の再送信を試みることができます。通常の通知フローが再開されるまで、24 時間ほど待たなければならない場合があります。

412 Precondition Failed

Dropped (ドロップ)

Disconnected (切断)

N/A

デバイスは切断された状態です。これらの通知がドロップされた場合でも、クラウド サービスは通常通りに通知の送信を継続します。これにより、デバイスが Connected (接続) 状態に戻ったときに、デバイスへの通知フローが確実に続行されます。

503 Service Unavailable

N/A

N/A

N/A

Push Notification Service は要求を処理できません。クラウド サービスは後で通知を再送信します。

Push Notification Service から送信される各応答は、次のカスタム ヘッダーを 1 つ以上含むことができます。

Header

説明/指定

MessageID

応答に関連付けられた通知メッセージ ID。Push Notification Service に配信された POST 要求に MessageID カスタム ヘッダーが含まれていなかった場合、MessageID は応答で返されません。詳細については、「Windows Phone 8 のプッシュ通知の送信」を参照してください。

"X-MessageID"":"1*MessageIDValue
MessageIDValue = STRING (uuid)
//For example:
X-MessageID:<UUID>

NotificationStatus

Microsoft Push Notification Service によって受信された通知のステータス。

"X-NotificationStatus"":"1*NotificationStatusValue
NotificationStatusValue = STRING (Received|Dropped|QueueFull|)
//For example:
X-NotificationStatus:Received

DeviceConnectionStatus

デバイスの接続ステータス。

"X-DeviceConnectionStatus"":"1*DeviceConnectionStatusValue
DeviceConnectionStatusValue = STRING
(Connected|InActive|Disconnected|TempDisconnected)
//For example:
X-DeviceConnectionStatus:Connected

SubscriptionStatus

サブスクリプション ステータス。

"X-SubscriptionStatus"":"1*SubscriptionStatusValue
SubscriptionStatusValue = STRING
(Active|Expired)
//For example:
X-SubscriptionStatus:Active

次のフローは、デバイスが Connected (接続)、Temp Disconnected (一時的に接続解除)、Disconnected (切断) のステータスを移行するサイクルを示しています。

  • Connected (接続) 状態では、デバイスとプッシュ通知サーバー間の接続が有効で、デバイスはリアルタイムで通知を受信できます。

    • 任意の時点でデバイスがこの状態である確率は、70-80% です。

  • Temp Disconnected (一時的に接続解除) 状態では、デバイスは一時的な状態に移行しています。プッシュ通知サーバーとの接続が失われていますが、デバイス上で有効なインターネット接続が使用可能になれば、すぐに再接続を試みます。

    • デバイスがこの状態を持続するのは、最大 24 時間です。

    • この期間中にデバイスに送信された通知はすべて、30 のキュー制限値に到達しない限り、以降で配信できるようにサーバーに保管されます。

    • デバイスがこの状態になる一般的な理由は、以降の「Temp Disconnected (一時的に接続解除) の概要」に説明されています。

    • 平均的に、任意の時点でこの状態であるデバイスの確率は最大 30% です。

  • Disconnected (切断) 状態では、デバイスは 24 時間以上プッシュ通知サーバーから切断されていますが、デバイス上で有効なインターネット接続が使用可能になれば、すぐに再接続を試みます。

    • デバイスが切断状態になると、そのデバイス用にキューに保管されていたすべてのメッセージと、デバイスに送信される新規メッセージはすべて破棄され、デバイスがプッシュ通知サーバーに再接続しても、配信されません。

    • 切断されたモバイル デバイスは通常、この状態です。所有者の意向、つまりユーザーが意図的にデータ接続を切断したか、デバイスが物理的に電池切れであることを意味します。

    • 任意の時点でこの状態であるデバイスの確率は、平均 10-15% です。

Transition flow for device connection status

この応答はさまざまな理由で発生する可能性があり、次に示すのはその一部です。

  • ネットワークの負荷と待機時間を減らすため、携帯電話会社のネットワーク構成では、永続的なデータ接続が有効でいられる時間が大きく異なる場合があります。Push Notification Client はこのような永続的なデータ接続の制限を軽減するよう試みますが、一定の下限があり、それを超えるとこの状況を軽減するために電力効率が悪くなります。このため、データ接続が中断された結果としてデバイスで "OK/Received/Temporarily Disconnected/Active" 状態が発生することがあります。

  • デバイスがキャリアのカバレッジ範囲外にあり、ローミング時にユーザーがデータ接続を無効にしています。

  • デバイスに Pay-As-You-Go プランがあり、デバイスが一時的にデータ接続を無効にしているか、または制限のあるデータ通信プラン オプションを使用しています。

  • デバイスがカバレッジ範囲の端にあり、データ接続が信頼できません。

  • Wi-Fi が使用されていて、携帯データ ネットワークが使用できない場合、プッシュ通知を受信するには、デバイスにインターネットへのクリア パスが存在する必要があります。一部の企業ネットワークでは、これが問題になる場合があります。

  • Data Sense が有効でデータ通信プラン制限を超えているユーザーは、通信量がデータ通信プランの範囲内に戻るまで、プッシュ通知は破棄されます。 この場合、このユーザーの Temp Disconnected (一時的に接続解除) が Disconnected (切断) に移行する可能性があり、通常の通信状態に戻るまで回復されません。

  • バッテリー セーバーが有効で、バッテリー セーバー インジケーター (システム トレイのバッテリー アイコン上のハート) が表示されている場合。 この状態では、バッテリーを節約するためにプッシュ接続はオフになります。 バッテリー セーバー モードを長時間アクティブにしておくと、デバイスは最終的に Disconnected (切断) 状態に移行します。

  • デバイスがセル接続と Wi-Fi 接続を交互に使用していて、接続の状態が安定していません。

表示: