如何分离 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 通知的沙箱和生产设备令牌的主要内容,如果未能解决你的问题,请参考以下文章

Python - 通过 FCM / APNs 向 IOS 或 Android 设备推送通知

即使连接到 APNS,也不会为生产发送推送通知 [重复]

APNs 消息发送到服务器,设备 iOS 上没有通知

我们可以从 iOS 设备向 APNs 发送推送通知吗?

iOS:生产推送通知,来自 APNS 服务器的无效令牌

应用程序删除和 APNS