Я играю с сервисом Apple Passbook. У меня действительно странное поведение на всех устройствах. Если я отправляю push-уведомление через APNS на устройство, чтобы сообщить им, что есть обновление для определенного прохода, они делают обновление, но не отображают никаких уведомлений на экране блокировки на устройстве.
Прямо сейчас я регистрирую всю связь между моим PHP-Webservice и APNS. Я всегда отвечаю с заголовком 200 и запрошенным ответом. (1-й серийный номер; 2-й Pass.pkpass), и устройство выполняет обновление, как я вижу в приложении сберегательной книжки, но, как я уже сказал, я не получаю никаких уведомлений на экране блокировки. Устройство настроено правильно, как описано в этой статье: ссылка
и я делаю свой запрос APNS следующим образом:
public function sendePushNotification($passTypeID, $debug = true)
{
// Zertifikat vorhanden ?
$certFullPath = dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . "api/cert/ck.pem";
if (file_exists($certFullPath))
{
/**
* Payload vorbereiten
*/
$message = 'PASSDROP UPDATE';
$body = array();
$body['aps'] = array('alert' => $message);
/**
* Host bestimmen
*/
$apnsHost = "gateway.push.apple.com"; // Development Umgbung
/**
* Stream erstellen
*/
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $certFullPath);
$fp = stream_socket_client('ssl://' . $apnsHost . ':2195', $err, $errstr, 2, STREAM_CLIENT_CONNECT, $ctx);
if (!$fp)
{
echo "Fehler beim APNS: " . $err . " / ". $errstr. "\n";
return false;
}
/**
* Payload versenden
*/
$payload = json_encode($body);
$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $this->token)) . pack("n",strlen($payload)) . $payload;
}
else
{
throw new Exception("Zertifikat-Bundle " . $certFullPath . " existiert nicht !!!");
}
}
Насколько я знаю, Apple не считывает полезную нагрузку при нажатии Pass в Passbook.
У кого-нибудь есть подсказка для меня, что я могу попробовать дальше? Нужно ли мне что-нибудь в файле pass.json?