1

我发现这篇文章对设置非常有帮助,但我还没有看到安装了通行证的 iPhone 上的推送通知。

Passkit-push-notification-not-working-with-urban-airship

我在 Urban Airship 的网站上设置了我的应用程序,推送到 Apple 的开发服务器。我在我的手机上安装了一个 pass 并运行我在上面的帖子中找到的以下命令:

airship = urbanairship.Airship(_UrbanAirshipPassbookKey, _UrbanAirshipPassbookMasterSecret) 
airship.push({'aps': {'alert': 'Go.'}}, device_tokens=tokens)

然后,我在 Xcode 的 iPhone 控制台窗口中看到了此推送的确认。

Received push for topic pass.xxx.xxx: {
    ...
    aps =  {
        banner = "Hello";
    };

然后 iPhone 将其更新标签连同其传递类型 ID 和设备库 ID 发送回 Web 服务。此时,Web 服务应该发回更改的通行证列表。但是,我反而看到以下错误消息:

<Warning>: Web service error for pass.mypasstype.id (http://192.168.30.209:8000): Response to 'What changed?' request included 1 serial numbers but the lastUpdated tag (2013-02-11T17:25:25) remained the same.

有谁知道为什么会这样?我是否需要实际修改 pass 中的字段才能让推送通知出现在设备上?

4

1 回答 1

2

对您的问题的简短回答是肯定的,您确实需要修改通行证中的一个字段才能获得要显示的推送通知。这是因为,与应用程序推送不同,Passbook 推送负载不决定通知的内容。

Passbook 推送消息的目的是提醒设备 Web 服务具有更新内容的新通行证。警报文本仅由新通行证内容决定。推送负载中的任何内容都将被忽略。Apple 建议使用空 JSON 字典的推送通知

发送推送后,它会触发以下链:

  • passTypeIdentifier设备接收带有andlastUpadted标签的推送和查询 Web 服务
  • Web 服务为所有通行证提供一个序列列表,其中包含自标记passTypeIdentifier以来已更改的序列lastUpdated
  • 设备接收序列号并请求 Web 服务为每个新通道发送新的 .pkpass 包
  • Web 服务发送新的 .pkpass 包
  • 设备收到 .pkpass 包并根据旧通行证检查它是否有更改
  • 如果满足以下条件,设备将显示在changeMessage密钥中提供的通知:
    • 值变了
    • 包含changeMessage%@ 字符串

如果 %@ 字符串不存在,则通行证将显示通知Pass Changed。如果changeMessage更改后的值不存在任何键,则不会显示任何消息。

于 2013-02-13T01:37:12.093 回答