我正在玩苹果Passbook服务。我在所有设备上都有一个非常奇怪的行为。如果我通过APNS向设备发送推送,让他们知道某个通行证有更新,他们会进行更新,但他们不会在设备的锁屏上显示任何通知。
现在我正在记录PHP-Webservice和APNS之间的整个通信。我总是回答headre 200和所要求的答案。 (第一个序列;第二个Pass.pkpass)和设备进行更新,因为我可以在存折应用程序中看到,但正如我已经说过,我没有在锁屏上得到任何通知。设备已按照本文所述正确设置:a link
我这样做我的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文件中需要什么吗?
答案 0 :(得分:5)
如果您的设备正在更新并接收新的通行证,但您没有看到通知,那么您的pass.json很可能不包含changeMessage键。
要显示通知:
对于Passbook,APNS推送的唯一目的是通知设备Web服务具有新内容。所有通知活动都由旧的和新的pass.json文件之间的差异决定。
如果你的传递字段正在改变,并且你有一个changeMessage键设置但你没有看到通知,那么发布pass.json之前和之后的相关部分可能有助于我们找出错误。
当'after'传递取代'之前'传球时,下面的json摘录将触发以下两个通知:
在通过之前:
"boardingPass": {
"headerFields": [{
"key": "h1",
"value": "--",
"label": "Gate",
"changeMessage": "Please proceed to gate %@"
}, {
"key": "h2",
"value": "On Time",
"label": "Status",
"changeMessage": "Flight status: %@"
}],
...
传球后:
"boardingPass": {
"headerFields": [{
"key": "h1",
"value": "22",
"label": "Gate",
"changeMessage": "Please proceed to gate %@"
}, {
"key": "h2",
"value": "Boarding",
"label": "Status",
"changeMessage": "Flight status: %@"
}],
...