Как сгенерировать GET-запрос к webServiceURL/version/devices/deviceLibraryIdentifier/registrations/passTypeIdentifier?passesUpdatedSince=tag

После создания прохода я могу добавить его на устройство, зарегистрировать устройство, сохранив данные в базе данных. Далее, как я могу сгенерировать GET-запрос к webServiceURL/version/devices/deviceLibraryIdentifier/registrations/passTypeIdentifier?passesUpdatedSince=tag? Я вижу это в консоли:
Apr 4 10:08:26 CamMobs-iPod4 passd[12098] <Warning>: Generating GET request with URL <http:/192.168.1.202:8888/passesWebserver/v1/devices/02d6566cc59dc34e3abd116eed498898/registrations/pass.cam-mob.passbookpasstest>
Apr 4 10:08:26 CamMobs-iPod4 passd[12098] <Warning>: Get serial #s task (for device 02d6566cc59dc34e3abd116eed498898, pass type pass.cam-mob.passbookpasstest, last updated (null); with web service url http://192.168.1.202:8888/passesWebserver/) got response with code 200
Apr 4 10:08:26 CamMobs-iPod4 passd[12098] <Warning>: Get serial #s task (for device 02d6566cc59dc34e3abd116eed498898, pass type pass.cam-mob.passbookpasstest, last updated (null); with web service url http://192.168.1.202:8888/passesWebserver/) encountered error: Server response was malformed (Missing response data)


person malinchhan    schedule 04.04.2013    source источник
comment
Вы не генерируете запрос GET, его генерирует устройство. Вам необходимо настроить веб-службу для распознавания запроса, затем запросить базу данных и вернуть список соответствующих серийных номеров или, если нет серийных номеров, требующих обновления, вернуться с ответом 204. Вы можете взять тот же код, который вы используете для перехвата регистрации, и адаптировать его для этого метода (и оставшихся 3 методов в спецификации веб-сервиса (отменить регистрацию, доставить новый проход и журнал).   -  person PassKit    schedule 04.04.2013
comment
почему последнее обновление (нулевое)?   -  person malinchhan    schedule 04.04.2013
comment
Потому что, когда устройство впервые получило пропуск, оно не получило заголовок Last-Modified. Если бы он получил заголовок, он бы запросил серийные номера, измененные с этой даты. Устройство никогда не узнает, является ли только что установленный пропуск самой свежей версией, поэтому оно всегда будет вызывать вашу веб-службу для проверки каждый раз, когда устанавливает новый пропуск.   -  person PassKit    schedule 04.04.2013
comment
как установить последний измененный заголовок?   -  person malinchhan    schedule 04.04.2013
comment
Итак, мне нужно выбрать серийный номер из моего прохода в базе данных?   -  person malinchhan    schedule 04.04.2013
comment
Все зависит от того, как вы обслуживаете свой файл .pkpass. Если вы используете PHP, то что-то вроде header('Last-Modified: ' . date("D, d M Y H:i:s", filemtime('/path/to/pass.pkass')) . ' GMT');. Если вы хотите установить в Apache, используйте mod_expires и установите что-то вроде ExpiresDefault modification plus 1 hour в вашем httpd-config. Вы, вероятно, могли бы найти это в Google быстрее, чем мне потребовалось время, чтобы напечатать это!   -  person PassKit    schedule 04.04.2013
comment
Я использую php, поэтому устанавливаю так: header('Last-Modified: ' . date(D, d M Y H:i:s, filemtime('/Applications/MAMP/htdocs/passesWebserver/DigiClubCard.pkpass')) . ' ВРЕМЯ ПО ГРИНВИЧУ');   -  person malinchhan    schedule 04.04.2013
comment
Предполагая, что вы сохраняете время последнего изменения в своей базе данных, тогда да, вы должны запрашивать и возвращать все серийные номера, относящиеся к этому идентификатору устройства, для которого требуется обновление. Если у вас есть идентификатор устройства и вы передаете время последнего обновления в разных таблицах, вам может потребоваться запрос JOIN или вам придется выполнить два запроса, чтобы ответить на этот запрос.   -  person PassKit    schedule 04.04.2013
comment
если я хочу обновить содержимое прохода, я добавляю новую строку в эту таблицу или,....?   -  person malinchhan    schedule 04.04.2013
comment
Для вашего заголовка да, но замените GMT ​​часовым поясом вашего сервера.   -  person PassKit    schedule 04.04.2013
comment
мой код для запроса GET выглядит следующим образом: if (strtoupper($_SERVER['REQUEST_METHOD']) === GET){ header('Last-Modified: ' . /Applications/MAMP/htdocs/passesWebserver/DigiClubCard.pkpass')) . ' GMT+07:00'); включить (connectdb.php); $querySelect = mysql_query(выберите * из digiCardPass); $строка=mysql_fetch_array($querySelect); если($серийный == $строка['серийный номер']){ } }   -  person malinchhan    schedule 04.04.2013
comment
но я не уверен, что я хочу ответить на этот запрос?   -  person malinchhan    schedule 04.04.2013
comment
документация очень понятна. Словарь JSON, содержащий массив серийных номеров и последний обновленный тег, например. {"serialNumbers":["abc123", "def455"],"lastUpdated":"1365057662"}. Однако в вашем случае проход не изменился, поэтому просто отправьте заголовок 204.   -  person PassKit    schedule 04.04.2013
comment
Также в вашем коде вы не должны отправлять последний измененный заголовок с этим ответом. Последний измененный заголовок должен быть отправлен при первой отправке пакета .pkpass на устройство. Использование $_SERVER['REQUEST_METHOD']) === "GET" также недостаточно, поскольку метод получения последней версии прохода также использует запрос GET.   -  person PassKit    schedule 04.04.2013
comment
lastUpdated = отметка времени?   -  person malinchhan    schedule 04.04.2013
comment
Читайте документы!! - это может быть что угодно, но проще всего реализовать временную метку - просто обратите внимание, что ее следует отправлять в виде строки, а не целого числа.   -  person PassKit    schedule 04.04.2013