Теперь я могу добавить передачу по ссылке из моего веб-сервиса. Затем я хочу иметь возможность обновить этот проход. Таким образом, мне нужно добавить webserviceURL и authenticationToken, но как получить этот токен?
как получить authenticationToken для ввода pass.json
Ответы (1)
Вы делаете это. Единственное требование состоит в том, что он должен быть не менее 16 символов.
Этот токен используется устройством в сочетании с serialNumber и passTypeIdentifier для аутентификации в вашей веб-службе и информирования устройства о том, что устройство авторизовано для получения определенного прохода.
В PHP вы можете сделать что-то вроде:
$authToken = generateAuthToken();
function generateAuthToken($length = 16) {
return substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
}
person
PassKit
schedule
14.03.2013
Благодарю вас! и еще одна вещь о webserviceURL, могу ли я использовать это: webServiceURL: 192.168.1.202:8888/passesWebservice ? Я помещаю файл php, pass.pkpass и т. д. в /application/MAMP/htdocs/passesWebservice/
- person malinchhan; 14.03.2013
Возможно... но вы можете столкнуться с проблемами брандмауэра на своем Mac (попробуйте проверить, есть ли у вас доступ к 192.168.1.202:8888 из Safari на устройстве iOS, подключенном к той же сети). Вам также нужно будет настроить тестовое устройство на использование http (в меню «Настройки» -> «Разработчик») и убедиться, что ваш ключ webServiceURL содержит начальный http — например,
"webServiceURL" : "http://192.168.1.202:8888/passesWebservice"
- person PassKit; 14.03.2013
Кроме того, вам потребуется создать полноценную веб-службу в
/application/MAMP/htdocs/passesWebservice/
и, вероятно, потребуется использовать базу данных для хранения идентификаторов устройств, токенов устройств и серийных номеров. Просто сброс файлов .pkpass в это место не сработает.
- person PassKit; 14.03.2013
да, я уже протестировал его на устройстве, оно работает, но я еще не зарегистрировал это устройство в своей базе данных!
- person malinchhan; 14.03.2013
при регистрации ваше устройство вызовет
http://192.168.1.202:8888/passesWebservice/v1/devices/{deviceID}/registrations/{passTypeIdentifier}/{serialNumber}
, где элементы в { } будут уникальными для каждого прохода. Ваша служба также должна убедиться, что заголовок запроса содержит ApplePass {authenticationToken}
.
- person PassKit; 14.03.2013
Это authToken, который я получаю: FcAXwHyKSnVPaxOd, по вашему коду, поэтому я ставлю так: authenticationToken:0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
- person malinchhan; 14.03.2013
Вы имеете в виду, что после добавления прохода мне нужно использовать метод POST для отправки 192.168.1.202:8888/ passWebservice/v1/devices{deviceID}/registrations/{passTypeIdentifier}/{serialNumber} .
- person malinchhan; 14.03.2013
когда я сгенерирую AuthToken?
- person malinchhan; 14.03.2013
давайте продолжим это обсуждение в чате
- person PassKit; 14.03.2013
почему появляется ошибка: [24-Apr-2013 10:10:25 Europe/Berlin] Журнал ошибок Passbook: [2013-04-24 15:08:13 +0700] Отмена регистрации задачи (для устройства c3f8344497e8f53f446c16622209eda1, тип прохода pass.cam- mob.passbookpasstest, серийный номер 0001; обнаружен URL-адрес веб-службы 192.168.1.202:8888/passesWebserver) ошибка: Ошибка аутентификации
- person malinchhan; 24.04.2013
Потому что вы не внедрили метод отмены регистрации?
- person PassKit; 24.04.2013
да, потому что в таблице регистрации нет идентификатора устройства. При регистрации вставляется только устройство, а при регистрации запрос на обновление не работает. Когда я тестирую в SQL MAMP, он работает. Это мой запрос: обновить регистрационный набор deviceID = '$deviceID', passTypeID = '$passTypeID', serialNo = '$serial', где deviceID = ' ' и passTypeID = ' ' и serialNo = ' '
- person malinchhan; 24.04.2013
Это никогда не будет обновляться, потому что критерии `deviceID = ' ' и passTypeID = ' ' и serialNo = ' ' ` никогда не будут соответствовать каким-либо записям. Вы уверены, что не должны использовать для этого
insert
, а не update
?
- person PassKit; 24.04.2013
когда я вставляю в таблицу пользователей, я вставляю в таблицу регистрации: mysql_query (INSERT INTO Registration (deviceID, passTypeID, serialNo, userID) VALUES ('','','','$newUserID'));
- person malinchhan; 24.04.2013
или я вставляю 'null' вместо ''?
- person malinchhan; 24.04.2013
Вы идете об этом неправильно. Подумайте, что произойдет, если вы добавите в БД более одного пользователя до того, как их пропуск зарегистрируется? Первый будет соответствовать обновлению и будет обновлять все пустые записи своими данными, тогда второй не будет соответствовать вообще. Лучшее место для идентификатора пользователя — в таблице пропусков, напротив серийного номера и идентификатора пропуска, который они зарегистрировали. Затем, когда вы получите запрос на регистрацию, просто используйте вставку для вставки, чтобы создать новую запись в таблице устройств. Вы также можете сохранить запись пользователя там, если хотите, но не раньше, чем устройство зарегистрируется.
- person PassKit; 24.04.2013