Apple推送通知 - 从生产应用程序获取空推送令牌 - 将在修复配置配置文件问题后发送推送令牌

时间:2013-03-05 21:41:09

标签: ios app-store push-notification apple-push-notifications entitlements

我们在iPhone应用中添加了接收推送通知。一切都在测试/沙箱环境中工作,我们从应用程序获取令牌ID,并可以从我们的服务器发送推送通知。

但现在该应用程序已获批准并从Appstore中出来,我们将空的推送令牌/通知ID发送到我们的服务器。我们已经拥有超过600个...请注意,最终用户确实会获得弹出窗口批准在应用程序中接收通知,应用程序只是在批准后将空令牌发送到我们的服务器。因此,APNS服务器可能会分发空令牌。

以下问题向我们表明,这可能是由于我们用于为应用商店构建的配置文件中缺少“推送通知”权利: How do I check if an iOS distribution provisioning profile has push notifications enabled?

缺少的权利是由于Apple的Provisiong protal网站中的一个错误,但是在“下载新的个人资料之前修改任何现有的个人资料”之后,如下文所述 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方法现在只在应用程序启动时调用。当推送令牌ID从空('')更改为实际令牌时,是否也会触发它?当然,我们不希望等待另一个(小)周的新AppStore批准,然后才发现推送通知仍然不适用于某些用户。我希望那里有一位专家可以告诉我们。

注意:我们正在使用在MonoTouch中开发的iPhone应用程序,并使用(旧)APNS-Sharp库从我们的服务器发送通知,但我不认为这些细节与此问题相关。

1 个答案:

答案 0 :(得分:3)

当600多名用户安装下一次更新并再次运行应用程序时,您的应用程序将调用registerForRemoteNotifications(因为您说您在启动时调用它),并且将获得非空设备令牌(当{{ 1}}被称为)。 Apple在他们的文档中指出,您应该始终在启动时调用此方法,而不是使用设备令牌的缓存副本,因为设备令牌不能保证保持不变。所以你不应该有任何问题。

以下是APNS文档的相关引用:

  

应用程序应在每次启动时注册并提供   提供当前令牌。它叫   registerForRemoteNotificationTypes:启动方法   注册过程。这个方法的参数需要一个   UIRemoteNotificationType(或者,对于OS X,NSRemoteNotificationType)   位掩码,指定初始类型的通知   应用程序希望接收 - 例如,图标 - 徽章和声音,   但不是警报信息。在iOS中,用户可以在此后修改   已启用通知类型的通知首选项   设置应用程序在iOS和OS X中,您都可以检索   当前启用的通知类型通过调用   enabledRemoteNotificationTypes方法。操作系统没有   徽章图标,显示警报消息,或播放警报声(如果有的话)   即使指定了这些通知类型,也不会启用这些通知类型   在通知有效载荷中。

这也很重要:

  

通过请求设备令牌并将其传递给提供者   您的应用程序启动时,您可以帮助确保提供程序   拥有设备的当前令牌。如果用户将备份还原到   设备或计算机,而不是为其创建备份的设备或计算机   (例如,用户将数据迁移到新设备或计算机),他   或者她必须至少启动一次申请才能收到   再次通知。如果用户将备份数据还原到新设备   或计算机,或重新安装操作系统,设备令牌   变化。此外,永远不要缓存设备令牌并将其提供给您   供应商;始终在需要时从系统获取令牌。   如果您的申请已经注册,请致电   registerForRemoteNotificationTypes:操作系统中的结果   将设备令牌立即传递给代理人而不会产生任何影响   额外的开销。