添加传递后设备如何注册自身

时间:2013-03-26 07:51:53

标签: web-services authentication ios6 passbook

当我在设备中添加传递时,我在控制台上看到如下:

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;
}

?>

1 个答案:

答案 0 :(得分: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

您上面发布的内容只是此过程的最后一行,(passd已经确定您在pass.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并捕获deviceLibraryIdentifierpushToken并将其存储在数据库中,链接到包含serialNumber的传递记录,authenticationTokenpassTypeIdentifier

然后第4行:您的网络服务使用201代码响应设备,表明注册成功。

第5行:然后,设备会向您的网络服务生成GET请求,以检查是否有相同证书的较新版本pof传递:

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

第6,7和8行:设备会向您的网络服务生成GET请求,以检查是否存在此特定传递的较新版本。它提供了一个If-Modified-Since header,其中包含上次下载的.pkpass软件包(第7行)标题中提供的日期,并提供了包含Authorization的另一个Applepass {authenticationToken}标头( 第8行),以便您的网络服务可以通过检查serialNumber的数据库记录来验证请求。

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

第9行上,网络服务以204响应回复,表示serialNumber没有需要更新的passTypeIdentifier第10行确认了这一点。

最后,在第11行上,设备会从您的网络服务收到304响应,确认其刚刚安装的通行证是该通行证的最新版本。

以上概述了您的Web服务将接收的内容以及成功注册设备所需的响应。