Passbook Update Push未在锁屏上显示

时间:2013-03-04 19:45:17

标签: ios6 apple-push-notifications passbook

我正在玩苹果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文件中需要什么吗?

1 个答案:

答案 0 :(得分:5)

如果您的设备正在更新并接收新的通行证,但您没有看到通知,那么您的pass.json很可能不包含changeMes​​sage键。

要显示通知:

  • 传递数据值必须已更改(字段标签,颜色和图像不会触发更新)和
  • 更改后的字段必须包含changeMes​​sage键,最好使用%@占位符替换为新字段值。

对于Passbook,APNS推送的唯一目的是通知设备Web服务具有新内容。所有通知活动都由旧的和新的pass.json文件之间的差异决定。

如果你的传递字段正在改变,并且你有一个changeMes​​sage键设置但你没有看到通知,那么发布pass.json之前和之后的相关部分可能有助于我们找出错误。

当'after'传递取代'之前'传球时,下面的json摘录将触发以下两个通知:

  • 请前往22号门
  • 航班状态:登机

在通过之前:

  "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: %@"
        }],
           ...