1

デバイスにパスを追加すると、コンソールに次のように表示されます。

Mar 26 14:32:36 CamMobs-iPod4 passd[7128] <Warning>: Card has more than 10 locations. Capping.
Mar 26 14:32:38 CamMobs-iPod4 MobileSafari[7115] <Warning>: Warning: Attempt to dismiss from view controller <BrowserRootViewController: 0x1ed546a0> while a presentation or dismiss is in progress!
Mar 26 14:32:39 CamMobs-iPod4 backboardd[52] <Warning>: CoreAnimation: updates deferred for too long
Mar 26 14:32:39 CamMobs-iPod4 locationd[41] <Notice>: Location icon should now be in state 'Active'
Mar 26 14:32:50 CamMobs-iPod4 locationd[41] <Notice>: Location icon should now be in state 'Inactive'
Mar 26 14:32:52 CamMobs-iPod4 profiled[7122] <Notice>: (Note ) profiled: Idled.
Mar 26 14:32:52 CamMobs-iPod4 profiled[7122] <Notice>: (Note ) profiled: Service stopping.
Mar 26 14:33:31 CamMobs-iPod4 locationd[41] <Warning>: Launch Services: Registering unknown app identifier com.apple.PassKit failed
Mar 26 14:33:31 CamMobs-iPod4 locationd[41] <Warning>: Launch Services: Unable to find app identifier com.apple.PassKit
Mar 26 14:33:33 CamMobs-iPod4 configd[50] <Notice>: network changed: v4(en0:192.168.1.109) DNS Proxy
Mar 26 14:33:53 CamMobs-iPod4 backboardd[52] <Notice>: Posting 'com.apple.iokit.hid.displayStatus' notifyState=0

.....なぜcom.apple.PassKitに登録しようとするのですか?私のサーバーでは、index.phpで次のようなコードを使用しています。

<?php
    // Transfer Request URL into array
$request = explode("/", substr(@$_SERVER['REQUEST_URI'], 1));
//$request = explode("/", substr(@$_SERVER['REQUEST_URI'], 1));
print_r($_SERVER['REQUEST_URI']);

if (strtoupper($_SERVER['REQUEST_METHOD']) === "POST"
    && isset($_SERVER['HTTP_AUTHORIZATION'])
    && strpos($_SERVER['HTTP_AUTHORIZATION'], 'ApplePass') === 0
    && $request[2] === "devices"
    && $request[4] === "registrations") {

$auth_key = str_replace('ApplePass ', '', $_SERVER['HTTP_AUTHORIZATION']);

$device_id = $request[3];
$pass_id = $request[5];
$serial = $request[6];

echo $request[3];
//$device_id = $_POST[''];
echo $device_id;
echo $pass_id;
echo $serial ; 
// Catch the JSON post and decode it
$dt = @file_get_contents('php://input');
   // $dt = @file_get_contents('php://input');
//$device_token = json_decode($dt);
//$device_token = $device_token->pushToken;

$pushtoken=json_decode($dt)->pushToken;
if (!$device_token) die('No Token Found'); // Token wasn't found

    $dbhost = 'localhost:8889';
    $dbuser = 'root';
    $dbpass = 'root';
    $dbname = 'passesdb';
    $conn = mysql_connect($dbhost, $dbuser, $dbpass)

    or die ('Error connecting to mysql'.mysql_error());         

    mysql_select_db($dbname);
    mysql_query("SET NAMES UTF8");
    mysql_query($sql,$conn);
    $table = 'Devices';
    $sql = mysql_query("insert into Devices values('$device_id','$pushtoken')");
    mysql_query($sql);
exit;
}

?>
4

1 に答える 1

2

これは、コンソールでの登録の成功の様子です。

1. Mar 26 17:00:03 iPhone5 passd[6262] <Warning>: Generating POST request with URL <https:/afr.passk.it/v1/devices/7864dc8fdcfe739273cf7362a0db2b35/registrations/pass.it.passk.developer3/1wqdDAqHydkRURA9YCjbq>
2. Mar 26 17:00:03 iPhone5 passd[6262] <Warning>: Request contains header field <Authorization: ApplePass 5cdddad65324384efa39575a4cf22424>
3. Mar 26 17:00:03 iPhone5 passd[6262] <Warning>: Request contains body dictionary {
        pushToken = 0bbe54794500332b789a3ddb69827386d5c9aad1cb035c9f2725761d419950b2;
    }
4. Mar 26 17:00:04 iPhone5 passd[6262] <Warning>: Register task (for device 7864dc8fdcfe739273cf7362a0db2b35, pass type pass.it.passk.developer3, serial number 1wqdDAqHydkRURA9YCjbq; with web service url https://afr.passk.it/) got response with code 201
5. Mar 26 17:00:04 iPhone5 passd[6262] <Warning>: Generating GET request with URL <https:/afr.passk.it/v1/devices/7864dc8fdcfe739273cf7362a0db2b35/registrations/pass.it.passk.developer3?passesUpdatedSince=1364287618>
6. Mar 26 17:00:04 iPhone5 passd[6262] <Warning>: Generating GET request with URL <https:/afr.passk.it/v1/passes/pass.it.passk.developer3/1wqdDAqHydkRURA9YCjbq>
7. Mar 26 17:00:04 iPhone5 passd[6262] <Warning>: Request contains header field <If-Modified-Since: Tue, 26 Mar 2013 07:35:33 GMT>
8. Mar 26 17:00:04 iPhone5 passd[6262] <Warning>: Request contains header field <Authorization: ApplePass 5cdddad65324384efa39575a4cf22424>
9. Mar 26 17:00:04 iPhone5 passd[6262] <Warning>: Get serial #s task (for device 7864dc8fdcfe739273cf7362a0db2b35, pass type pass.it.passk.developer3, last updated 1364287618; with web service url https://afr.passk.it/) got response with code 204
10. Mar 26 17:00:04 iPhone5 passd[6262] <Warning>: Get serial numbers task completed with update tag (null), serial numbers (null)
11. Mar 26 17:00:05 iPhone5 passd[6262] <Warning>: Get pass task (pass type pass.it.passk.developer3, serial number 1wqdDAqHydkRURA9YCjbq, if-modified-since Tue, 26 Mar 2013 07:35:33 GMT; with web service url https://afr.passk.it/) got response with code 304

上に投稿したのは、このプロセスの最後の行だけです(passdpass.jsonに10を超える場所があることがわかりました)。


上記を調べると、Webサービスが応答する必要のあるイベントのフローを確認できます。

行1:デバイスはPOSTリクエストを次の宛先に送信します。

https://webserviceURL/v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}/{serialNumber}`

行2: POSTリクエストはヘッダーフィールドとともに送信されます:

Authorization: ApplePass {authenticationToken}

行3: POST本文にはJSONディクショナリが含まれています。

{
    pushToken = {pushToken};
}

書き換えルールが正しい場合、PHPコードはURLを分析し、とをキャプチャdeviceLibraryIdentifierしてデータベースに保存し、、、およびpushTokenを含むパスレコードにリンクする必要があります。serialNumberauthenticationTokenpassTypeIdentifier

次に行4: Webサービスは201、登録が成功したことを示すコードでデバイスに応答します。

行5:次に、デバイスはWebサービスへのGET要求を生成して、同じ証明書に対して新しいバージョンのpofパスがあるかどうかを確認します。

https:/webserviceURL/v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}?passesUpdatedSince={lastUpdateTag}

行6、7、および8:デバイスはWebサービスへのGET要求を生成して、この特定のパスの新しいバージョンがあるかどうかを確認します。これはIf-Modified-Since header、最後にダウンロードされた.pkpassバンドルのヘッダー(行7 )で提供される日付を含み、 (行8 )を含む別のAuthorizationヘッダーを提供します。これにより、Webサービスはデータベースレコードで.pkpassをチェックして要求を検証できます。Applepass {authenticationToken}serialNumber

https:/webserviceURL/v1/passes/{passTypeIdentifier}/{serialNumber}
Header: If-Modified-Since: {last modified date}
Header: Authorization: ApplePass {authenticationToken}

行9 Webサービスは応答で応答し、更新が必要な の204がないことを示します。行10はこれを確認します。serialNumberpassTypeIdentifier

最後に、行11で、デバイスは304Webサービスから応答を受信し、インストールしたばかりのパスがパスの最新バージョンであることを確認します。

上記は、Webサービスが受信する内容と、デバイスを正常に登録するために提供する必要のある応答の概要を示しています。

于 2013-03-26T09:34:17.320 に答える