1

Restlet2.0 (java) を使用して通帳サーバーを構築しています。PushToken を使用して APNs にプッシュ通知を送信すると、サーバー ログから「if-modified-since (null)」というメッセージが表示されました。

entity.getText() : {"logs":["[2013-03-31 00:18:29 +1100] パス タスクを取得 (パス タイプ pass.xxxxxx.freehug、シリアル番号 ABC、if-modified-since (null ); Web サービスの URL http://192.168.1.43:8080/passbook/restlet) でエラーが発生しました: サーバーの応答が正しくありません (応答データがありません)"]}

この応答 URL は、LoggingResource クラス (行 4) に対して定義されたルーターと一致しますが、最新の pkpass 比較のために取得される passUpdatedSince={tag} パラメーターを定義する SerialNumbersPassWithDeviceResource クラス (行 2) とは一致しません。

router.attach("/v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}/{serialNumber}", DeviceRegistrationResource.class); //1/4. Registration - POST/DELETE
router.attach("/v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}?passUpdatedSince={tag}", SerialNumbersPassWithDeviceResource.class);  //2. SerialNumbers - GET
router.attach("/v1/passes/{passTypeIdentifier}/{serialNumber}", LatestVersionPassResource.class);  //3. LatestVersion - GET
router.attach("/v1/log", LoggingResource.class);  //5. Logging - POST

では、更新タグ (passUpdatedSince={tag}) をどこに設定できますか? また、2 行目のルーターの下でそれを取得するにはどうすればよいでしょうか? Update タグを取得するためのルーターの設定は正しいですか?

4

1 に答える 1

3

値は、passUpdatedSince={tag}Web サービスが要求に対して返した最後の成功した応答から設定されます。

https://{webServiceURL}/v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}

lastUpdated上記のリクエストに対する JSON ディクショナリ レスポンスでキーを指定することで設定します。値は自由に設定できますが、最も簡単な方法はタイムスタンプを使用することです。

if-modified-since値は、最後に受信した .pkpass バンドルと一緒に送信された HTTP ヘッダーによって設定され、とLast-Modifiedに一致しpassTypeIdentifierますserialNumber。ここでも、このヘッダーで送信する値を選択できます。

上記の特定のエラーは、これらのいずれかが原因ではありません。これは、Web サービスが.pkpass次の要求に応じてバンドルを提供していないことが原因です。

https://{webServiceURL}/v1/passes/{passTypeIdentifier}/{serialNumber}

デバイスを Xcode に接続し、PassKit のログを有効にして ([設定] -> [開発者])、プッシュを送信する際にデバイスのコンソール ログを監視することをお勧めします。これにより、デバイスがメッセージを Web サービス ログに送信した理由の詳細がわかる場合があります。

于 2013-03-30T14:46:01.717 に答える