2012-11-18 156 views
8

我试图让APNS宝石与我的Rails应用程序一起工作。最初几个月前我已经设置了它,并将通知推送到iOS设备上。现在,我的应用程序正在运行,并且我发现通知不再出现。 APNS gem已经有一段时间没有更新,所以我尝试了各种后来的分支,所有的效果都一样。红宝石apns宝石返回无

下面是我在做什么:

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不关心。

鉴于涉及到这一点的移动部件的数量,我知道这是一个棘手的问题。但任何人都可以建议去哪里看?

回答

2

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

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

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

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

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

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

2

official documentation这样说:

如果你发送通知和APN的认定通知畸形 或不能理解,则返回错误响应分组之前 到断开。 (如果没有错误,则APN不会返回 任何内容。)图5-3描述了错误响应数据包的格式。

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

我上次使用Apple推送通知时,它几乎表现得像一个黑盒子,大部分时间没有返回任何东西。

+0

我已经注意到了相同的缺点。有没有解决这个问题的方法?任何方式来获得返回错误值? –

+0

那么你可以尝试重写gem的'send_notifications'方法,并尝试访问它中的'ssl'变量来查看你可以从中获得什么(参见[github上的代码](https://github.com/jpoz) /APNS/blob/master/lib/apns/core.rb))。 但是就像之前说过的,因为如果(据说)成功,APNS不会返回任何东西,恐怕没有什么可以做的。 'ssl.write'只会给你写入的字节数,所以可能不会非常有用。 – Raf