我们将接收推送通知添加到iPhone应用程序中。一切都在测试/沙箱环境中工作,我们可以从应用程序中获取令牌id,并可以从我们的服务器发送推送通知。
但是现在应用程序被批准了,并且从应用商店出来了,我们得到了空的推送令牌/通知id发送到我们的服务器。我们已经有600多个了.请注意,最终用户确实会让弹出窗口批准在应用程序中接收通知,应用程序只是在批准后将空令牌发送到我们的服务器。因此,空令牌可能是由APNS服务器分发的。
下面的问题告诉我们,这可能是因为我们用来构建应用商店的配置文件中缺少“推送通知”权限:How do I check if an iOS distribution provisioning profile has push notifications enabled?
遗漏的权利是由于苹果提供门户网站的一个漏洞,但在以下文章http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ProvisioningDevelopment/ProvisioningDevelopment.html中提到的“在下载新的个人资料之前修改任何现有的个人资料”之后
现在,我们在.mobileprovision文件中有了正确的授权:
<key>Entitlements</key>
<dict>
..
<key>aps-environment</key>
<string>production</string>
..因此,我们正在重建我们的应用程序,并将其添加到商店中。希望届时能收到推送通知。
我希望上面的内容能对其他人有所帮助。但现在来问我的实际问题:当已经下载了当前版本的600+用户在商店外安装下一个更新时,我们是否也会开始接收新的推送令牌?或者我们需要在我们的应用中添加一些初始代码?registerForRemoteNotifications方法目前仅在应用程序启动时调用。推流token id从空('')变为实际token是否也会被触发?当然,我们不想为新的AppStore审批再等一个(小)星期,直到那时才发现推送通知对一些用户仍然不起作用。我希望外面的专家能告诉我们。
注意:我们使用的是用MonoTouch开发的iPhone应用程序,并使用(旧的) APNS-Sharp库从我们的服务器发送通知,但我不认为这些细节与此问题相关。
发布于 2013-03-06 06:34:16
当这些600+用户安装下一个更新并再次运行应用程序时,您的应用程序将调用registerForRemoteNotifications (因为您说过您在启动时调用它),并将获得非空设备令牌(当调用application:didRegisterForRemoteNotificationsWithDeviceToken:时)。Apple在他们的文档中声明,您应该始终在启动时调用此方法,而不是使用设备令牌的缓存副本,因为不能保证设备令牌保持不变。所以你应该不会有任何问题。
以下是APNS文档中的相关引用:
应用程序应该在每次启动时注册,并为其提供者提供当前令牌。它调用registerForRemoteNotificationTypes:方法来启动注册过程。此方法的参数采用UIRemoteNotificationType (对于OS X,则为NSRemoteNotificationType)位掩码,该掩码指定应用程序希望接收的初始通知类型(例如,图标标记和声音,但不包括警报消息)。在iOS中,用户随后可以在设置应用程序的通知首选项中修改已启用的通知类型。在iOS和OS X中,您都可以通过调用enabledRemoteNotificationTypes方法来检索当前启用的通知类型。如果未启用这些通知类型中的任何一种,即使已在通知有效负载中指定,操作系统也不会标记图标、显示警报消息或播放警报声音。
这也是相关的:
通过请求设备令牌并在每次应用程序启动时将其传递给提供程序,您可以帮助确保提供程序拥有设备的当前令牌。如果用户将备份还原到为其创建备份的设备或计算机以外的设备或计算机(例如,用户将数据迁移到新设备或计算机),则他或她必须至少启动一次应用程序才能再次接收通知。如果用户将备份数据还原到新设备或计算机,或者重新安装操作系统,则设备令牌会更改。此外,永远不要缓存设备令牌并将其提供给您的提供商;无论何时需要,都要从系统中获取令牌。如果您的应用程序以前已注册,则调用registerForRemoteNotificationTypes:会导致操作系统立即将设备令牌传递给委托,而不会产生额外的开销。
https://stackoverflow.com/questions/15234690
复制相似问题