8

我正在尝试让 APNS gem 与我的 Rails 应用程序一起使用。我最初是在几个月前设置的,并且向 iOS 设备推送通知运行得很好。现在,我的应用程序已上线,我发现通知不再发出。APNS gem已经有一段时间没有更新了,所以我尝试了各种后来的分支,都达到了相同的效果。

这就是我正在做的事情:

APNS.host = 'gateway.push.apple.com' 
APNS.pem  = Rails.root + "lib/push_production.pem"
APNS.port = 2195 
APNS.send_notification(device_token, "Test send" )

结果呢?

=> nil

没有任何方法的反馈,也没有我可以检查的日志文件。我已经尝试生成和重新生成我的证书;那里一切似乎都很好。我尝试以各种方式表达我的设备令牌,没有尖括号,字符组之间没有空格...... APNS 不在乎。

考虑到其中涉及的活动部件的数量,我知道这是一个棘手的问题。但是任何人都可以建议在哪里看吗?

4

3 回答 3

2

官方文档是这样说的:

如果您发送通知并且 APNs 发现通知格式错误或无法理解,它会在断开连接之前返回错误响应数据包。(如果没有错误,APNs 不会返回任何内容。)图 5-3 描述了错误响应数据包的格式。

所以只有 gem 不返回任何东西才有意义,因为 Apple 的服务器不会让它知道它在做什么。此外,如果您查看 gem 的 github 页面,给定的示例不处理APNS.send_notification.

上次我使用 Apple Push Notifications 时,它的行为就像一个黑盒子,大部分时间都不返回任何东西。

于 2012-11-20T16:38:57.227 回答
2

我相信我已经找到了答案。在 Urban Airship 注册了一个账号后,我尝试向我的手机发送一条测试消息,但还是无济于事。但是这些家伙实际上是一起行动的,所以他们能够向我显示错误信息!原来我的设备令牌无效。为什么?因为它是由应用程序的沙盒版本生成的。

是的,我的应用程序在商店中,但事实证明,我的 App Store 分发配置文件是在将推送通知权利添加到其中之前生成的。因此,当您在我的可执行文件上运行 codesign 工具时,它不会显示权利。这是一个例子:

Diomedes:Release-iphoneos aaron$ codesign -dvvvv --entitlements - Tiberius.app

该命令应显示一个 plist,其中包含值为“production”的键。我的版本根本没有那个钥匙。

实际上,我被迫在 Provisioning Portal 中生成一个全新的分发配置文件,它最终确实包含了正确的权利。我还没有能够对此进行测试(8 天的 App Store 审查,有人吗?)但我觉得这就是问题所在。

PS Urban Airship 网站上的这篇文章对我很有帮助。

于 2012-11-21T03:45:35.323 回答
0

这对我有用,

Is your sandbox value correct? Use false for production certificates and use true for development certificates.

PS https://github.com/tompesman/push-core/issues/27

于 2014-05-30T11:40:39.077 回答