从 diawi 或 TestFlight 安装后设备令牌会更改吗?所以推送通知不会来

Device Tocken will Change after install from diawi or TestFlight? So Push notification is not coming

我目前正在创建一个需要从服务器接收推送通知的应用程序。

当我得到设备令牌后,我将它发送到我的服务器并将其保存到数据库中,

我的问题是:


当我尝试在 XCode 的设备上正常安装应用程序时,我得到了正确的设备令牌,它正在用于推送通知。

但是当我尝试从 TestFlight 或 diawi 安装应用程序时,设备令牌发生了变化,并且对于那个错误的设备令牌应用程序没有收到任何推送通知。

任何帮助将不胜感激

当您通过 XCode 在设备上安装您的应用程序时,它将 运行 在开发(沙盒)配置中。您将收到开发令牌,您需要通过 ssl://gateway.sandbox.push.apple.com:2195(使用开发证书)发出推送通知。

但是:当您通过 TestFlight 安装您的应用程序时,您的应用程序在分发(生产)模式下编译(运行):生产令牌与开发令牌不同。仅仅使用这个新的(生产)令牌也是不够的。在这种情况下,必须通过 ssl://gateway.push.apple.com:2195(使用生产证书)发出推送通知。

我找到了我的问题的答案。

切勿将 NSUserDefaults 的密钥用作@"key"。

比如我之前用过的

[[NSUserDefaults standardUserDefaults] setObject:deviceToken forKey:@"key"];
[[NSUserDefaults standardUserDefaults] synchronize];

还有我现在用的。

[[NSUserDefaults standardUserDefaults] setObject:deviceToken forKey:@"token"];
[[NSUserDefaults standardUserDefaults] synchronize];

现在推送通知照原样来了。

所以结论是从来没有用过你的键名@"key"。我不知道为什么,但可能有些偏好默认使用此 @"key"

谢谢。