Ios Apple推送通知-从生产应用程序获取空推送令牌-将在修复配置文件问题后发送推送令牌
我们将接收推送通知添加到iPhone应用程序中。一切都在测试/沙箱环境中工作,我们从应用程序中获取令牌id,并可以从服务器发送推送通知 但现在,该应用程序已获得批准,并从应用商店出来,我们收到了发送到服务器的空推送令牌/通知id。我们已经有600多个了。。。请注意,最终用户确实会获得弹出窗口以批准在应用程序中接收通知,该应用程序只是在批准后向我们的服务器发送空令牌。因此,APNS服务器可能会分发空令牌 以下问题向我们表明,这可能是由于我们用于为app store生成的配置文件中缺少“推送通知”权限造成的: 这项权利的缺失是由于苹果的ProvisioningProtal网站中的一个bug造成的,但正如以下文章中提到的“在下载新配置文件之前修改任何现有配置文件” 我们现在在.mobileprovision文件中拥有正确的权限:Ios Apple推送通知-从生产应用程序获取空推送令牌-将在修复配置文件问题后发送推送令牌,ios,app-store,push-notification,apple-push-notifications,entitlements,Ios,App Store,Push Notification,Apple Push Notifications,Entitlements,我们将接收推送通知添加到iPhone应用程序中。一切都在测试/沙箱环境中工作,我们从应用程序中获取令牌id,并可以从服务器发送推送通知 但现在,该应用程序已获得批准,并从应用商店出来,我们收到了发送到服务器的空推送令牌/通知id。我们已经有600多个了。。。请注意,最终用户确实会获得弹出窗口以批准在应用程序中接收通知,该应用程序只是在批准后向我们的服务器发送空令牌。因此,APNS服务器可能会分发空令牌 以下问题向我们表明,这可能是由于我们用于为app store生成的配置文件中缺少“推送通知”权
<key>Entitlements</key>
<dict>
..
<key>aps-environment</key>
<string>production</string>
..
权利
..
aps环境
生产
..
因此,我们正在重建我们的应用程序,并将其添加到商店中。然后希望得到推送通知
我希望以上内容能对其他人有所帮助。但现在让我们来回答我的实际问题:当600多名用户在商店外安装下一个更新时,他们已经下载了当前版本,我们是否也会开始接收新的推送令牌?或者我们需要在我们的应用程序中添加一些初始代码吗?registerForRemoteNotifications方法目前仅在应用程序启动时调用。推送令牌id从空(“”)更改为实际令牌时是否也会触发?当然,我们不想再等一个(小)星期,等待新的AppStore批准,然后才发现推送通知对某些用户仍然不起作用。我希望外面的专家能告诉我们
注意:我们正在使用MonoTouch开发的iPhone应用程序,并使用(旧的)APNS Sharp库从我们的服务器发送通知,但我认为这些细节与此问题无关。当600多名用户安装下一次更新并再次运行应用程序时,您的应用程序将调用
registerforremotentifications
(因为您说过在启动时调用它),并将获得非空的设备令牌(当调用application:didRegisterforremotentificationswithDeviceToken:
时)。
Apple在其文档中声明,您应该在启动时始终调用此方法,而不是使用设备令牌的缓存副本,因为设备令牌不能保证保持不变。所以你不应该有任何问题
以下是APNS文件中的相关引用:
应用程序应在每次启动时进行注册,并给出
提供程序设置当前令牌。它叫
RegisterForRemotionTificationTypes:方法启动
登记过程。此方法的参数采用
UIRemoteNotificationType(对于OS X,则为NSRemoteNotificationType)
位掩码,指定
应用程序希望接收例如图标标识和声音,
但不是警报消息。在iOS中,用户随后可以修改
已在的通知首选项中启用通知类型
设置应用程序。在iOS和OS X中,您都可以检索
通过调用
enabledRemoteNotificationTypes方法。操作系统不支持
徽章图标、显示警报消息或播放警报声音(如果有)
即使指定了这些通知类型,也不会启用它们
在通知有效负载中
这也是相关的:
通过请求设备令牌并将其每年传递给提供商
应用程序启动时,您可以帮助确保提供程序
具有设备的当前令牌。如果用户将备份恢复到
设备或计算机,而不是为其创建备份的设备或计算机
(例如,用户将数据迁移到新设备或计算机),他
或者她必须至少启动一次应用程序,应用程序才能收到
再次通知。如果用户将备份数据恢复到新设备
或重新安装操作系统、设备令牌
变化。此外,永远不要缓存设备令牌并将其交给您的用户
供应商;无论何时需要,始终从系统获取令牌。
如果您的应用程序以前已注册,请调用
RegisterForRemotionTificationTypes:操作系统中的结果
立即将设备令牌传递给代理,而不会导致
额外的开销
谢谢@Eran,回答得很好!我再次详细检查了我的iPhone代码(实际上已经有一段时间了),我想确实应该在从空值更改为正确值时将推令牌发送给我们。我会把你的答案指定为确定答案,以防遇到真正精彩的答案,也会一直等到我们的应用程序从应用商店出来并开始工作。据我所知,这只能做一次:是的,它是有效的!应用程序中无需更改任何代码。下一个版本发布后,我们开始从用户那里接收推送令牌。当然,应用程序在更新后会重置/重新启动,因此在启动时会调用RegisterForRemoteNotifications,使用新的授权,现在APN会给我们令牌。