Ruby apns gem返回nil

时间:2012-11-18 03:08:29

标签: ios ruby-on-rails apple-push-notifications

我正在尝试让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不关心。

鉴于涉及此活动部件的数量,我知道这是一个棘手的问题。但是,有人可以建议去哪里看看吗?

3 个答案:

答案 0 :(得分:2)

official documentation说:

  

如果您发送通知并且APN发现通知格式错误   或者以其他方式无法理解,它先返回错误响应包   断开连接。 (如果没有错误,APN不会返回   任何事情。)图5-3描述了错误响应数据包的格式。

因此,只有宝石不会返回任何内容才有意义,因为Apple的服务器不会让它知道它在做什么。另外,如果你看一下gem的github页面,给定的例子不会处理APNS.send_notification的返回值。

上次我使用Apple推送通知时,它几乎就像一个黑盒子,大部分时间都没有返回任何内容。

答案 1 :(得分:2)

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

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

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

该命令应显示包含值为“production”的键的plist。我的发布完全没有那个密钥。

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

P.S。 Urban Hirship网站上的This article帮助了我。

答案 2 :(得分:0)

这对我有用,

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

P上。 S. https://github.com/tompesman/push-core/issues/27