我正在玩苹果存折服务。我在所有设备上都有一个非常奇怪的行为。如果我通过 APNS 向设备发送推送,让他们知道某个通行证有更新,他们会进行更新,但不会在设备的锁屏上显示任何通知。
现在我正在记录我的 PHP-Webservice 和 APNS 之间的整个通信。我总是用 headre 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 在 Passbook 中推送 Pass 时不会读取有效负载。
有没有人暗示我接下来可以尝试什么?我需要 pass.json 文件中的任何内容吗?