0

りんご通帳サービスで遊んでいます。すべてのデバイスで非常に奇妙な動作をします。APNS 経由でデバイスにプッシュを送信して、特定のパスの更新があることを知らせると、更新は行われますが、デバイスのロック画面には通知が表示されません。

現在、PHP-Webservice と APNS の間の通信全体をログに記録しています。私はいつもheadre 200で答え、要求された答えです。(1st Serials; 2nd 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 !!!");
}
}

私が知る限り、Passbook で Pass をプッシュするとき、Apple はペイロードを読み取りません。

次に何を試すことができるか、誰かが私にヒントを持っていますか? pass.json ファイルに何か必要ですか?

4

1 に答える 1

5

デバイスが更新され、新しいパスを受信して​​いるのに通知が表示されない場合は、pass.json に changeMes​​sage キーが含まれていない可能性があります。

通知を表示するには:

  • パス データ値が変更されている必要があります (フィールド ラベル、色、および画像は更新をトリガーしません)。
  • 変更されたフィールドには changeMes​​sage キーが含まれている必要があり、できれば新しいフィールド値に置き換えられる %@ プレースホルダーが含まれている必要があります。

Passbook の場合、APNS プッシュの唯一の目的は、Web サービスに新しいコンテンツがあることをデバイスに通知することです。すべての通知アクティビティは、古い pass.json ファイルと新しい pass.json ファイルの違いによって決まります。

pass フィールドが変更され、changeMes​​sage キーが設定されているにもかかわらず通知が表示されない場合は、pass.json の関連する before セクションと after セクションを投稿すると、何が問題なのかを特定するのに役立ちます。

以下の json の抜粋は、「after」パスが「before」パスを置き換えるときに、次の 2 つの通知をトリガーします。

  • 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: %@"
        }],
           ...
于 2013-03-05T00:13:35.067 に答える