如何分离 iOS APNS 通知的沙箱和生产设备令牌
Posted
技术标签:
【中文标题】如何分离 iOS APNS 通知的沙箱和生产设备令牌【英文标题】:How to separate sandbox and production device token of iOS APNS notification 【发布时间】:2012-09-28 09:35:17 【问题描述】:我不小心将沙盒和生产设备令牌混合在同一个数据库表中。这导致一些安装生产应用程序的设备无法收到推送通知。
如何从数据库表中分离沙盒令牌和生产令牌?非常感谢您的帮助!!谢谢!
【问题讨论】:
在这里回答:***.com/questions/10146911/… 【参考方案1】:您可能应该使用某种 UDID(您可以通过散列捆绑 ID 和设备的 MAC 地址来创建自己的 UDID)和指示令牌是否为“开发”或“生产”令牌。第三个字段可以是实际的令牌。
在 didRegisterForRemoteNotificationsWithDeviceToken 委托方法中的应用委托中,您可以添加逻辑以确定您的应用是在开发模式还是生产模式下运行,并使用基于 UDID 的设备令牌和应用运行的“模式”更新您的数据库在。
您的代码可能如下所示:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
// Update the device token record in our database
#if !defined (CONFIGURATION_Distribution)
// Update the database with our development device token
#endif
#if defined (CONFIGURATION_Distribution)
// Update the database with our production device token
#endif
为此,您需要转到您的项目 -> 构建设置。在 Preprocessor Macros 部分输入 CONFIGURATION_ 并按 Enter。这应该为您的每个构建配置创建一个预处理器宏。在这种情况下,我的构建配置是 AdHoc、Debug、Distribution 和 Release。
它为我创建了 CONFIGURATION_AdHoc、CONFIGURATION_Debug、CONFIGURATION_Distribution 和 CONFIGURATION_Release。
【讨论】:
如果能够仅通过代码来判断就好了,但这看起来可能是唯一的方法。 例如,我已经有一个用于 uuid 的字段,以及一个作为通知引擎的字段。所以对于调试版本,我应该将通知引擎设置为“applesand”或类似的。 开发设备令牌和生产设备令牌是同一个字符串吗? @luyuan - 每个环境的令牌都不一样 是的,我发现了。但我不知道为什么生产推送永远不会以 adhoc 模式到达我的 iPhone。以上是关于如何分离 iOS APNS 通知的沙箱和生产设备令牌的主要内容,如果未能解决你的问题,请参考以下文章