2010-07-08 72 views
0

我必须开发一个以特定方式使用推送通知的应用程序,而且我有一个非常棘手的问题:设备标记是否可以本地存储在应用程序沙箱中? 这是为什么:这个应用程序应该实现一个通知系统,允许用户从iPhone只订阅一些特定的事件。 因此,要做到这一点,我需要在应用程序运行时随时发送到我的数据库的iPhone设备令牌,从我得到的,该设备令牌只avaliable当iPhone设备令牌:它可以存储在iPhone上吗?

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 

是所谓的权利? 或者有什么方法可以稍后检索此信息?

谢谢。

回答

1

你应该把它存储在手机的某个地方。 NSUserDefaults是一个体面的地方,因为它不是一大块数据,你可以在之后轻松找回它。我也建议将它保存在您的服务器上,并且只有在令牌更改时才更新它。然而

+0

苹果不会拒绝我的应用程序,因为我在本地存储tolen 谢谢您见解;) – radada 2010-07-08 14:05:25

+0

不,你不会被拒绝,因为你需要知道在哪里发送通知,所以它需要存储在服务器上。 – Elfred 2010-07-08 15:25:16

3

push notification programming guide建议您不要在本地存储令牌:

“的应用程序应该注册每次启动时,给其提供当前标记,它调用registerForRemoteNotificationTypes:揭开序幕注册过程。 “

...

“通过请求设备令牌,它每一次传递给供应商应用程序启动时,你帮助确保云服务提供商的设备当前令牌。如果用户恢复备份到创建备份以外的设备(例如,用户将数据迁移到新设备)时,他或她必须至少启动一次该应用程序才能再次接收通知。如果用户恢复备份数据到新设备或重新安装操作系统,设备令牌会发生变化。此外,永远不会缓存设备令牌,并给予到您的供应商; 随时随地从系统获取令牌。如果您的应用程序之前注册的,叫registerForRemoteNotificationTypes:?结果通过设备令牌给委托的iOS立即而不会产生额外开销”

+1

任何想法为什么苹果有这个建议?他们想要吗?我们每次连接到我们的服务器,不应该通过缓存来优化。 – msk 2012-04-17 13:43:55

+0

可能绝对确保服务器始终拥有当前令牌,并且在令牌变化的情况下,推送通知不会突然停止ES。如果考虑到服务器也可以在反馈服务告知服务器时忘记令牌,那么在客户端进行可靠的缓存并不容易。此外,如果应用程序不会每次都提交令牌,则反馈消息的时间戳比较将无法正常工作。 – Zargony 2012-04-25 06:11:47

+0

不理解你的观点。如果反馈服务表示令牌更改(对我们的服务器),我的应用程序也将获得新令牌,并且我可以更新服务器。不是? – msk 2012-04-25 11:20:48

相关问题