应用程序从应用商店返回设备令牌的空值

Ale*_*x G 2 xcode objective-c push-notification ios

我已经通过推送通知发布了我的应用更新,但是当我检查我的服务器时,我注意到发送到数据库的令牌是"null".我使用开发证书和ad hoc的生产证书进行了大量测试.两者都成功地工作但是app store上的版本没有,我不明白为什么.我在2周前发布了这个问题,有人告诉我,我不应该使用我用于临时的配置文件,所以我创建了一个具有相同ID的新配置文件.更新昨天发布,我仍然有同样的问题.我需要找到一个永久的解决方案,因为我的用户对所有这些更新感到恼火,但我不知道如何测试,直到它在应用商店获得批准.

如果有人可以提供想法或帮助,我会非常感激.提前致谢.

PS如果它有帮助,我从我的设备删除了我的应用程序,并从应用商店再次安装...它没有问我是否要接收推送通知但是从手机设置启用了应用程序的推送...

Ang*_*qui 11

APN通信有3个步骤:

  1. 您的应用注册以在iOS中的appDelegate中接收APN.这将为您提供一个用于发送通知的deviceToken.
  2. 您的应用将deviceToken发送到您的管理服务器
  3. 您的管理服务器与Apple APNs服务器连接以发送推送通知

在您的情况下,我了解您的问题在步骤1中,因为您说您的设备ID为空,并且应用程序没有询问您有关APN的权限.因此,更改服务器证书或从gateway.sandbox.push.apple.com切换到gateway.push.apple.com不会有帮助,因为之前发生了错误.

这显然是您的证书的问题.您应该检查您是否已完成Apple iOS Provisioning Portal中的所有必需步骤:

  1. 使用应用的包标识符创建AppId.避免使用*等野猫.
  2. 为您的应用配置InAppPurchase选项(这不是问题,因为它用于通信中的第3步)
  3. 为Distribution使用 1中使用的AppId创建配置文件.(我怀疑这可能是您的问题),并下载它
  4. 打开XCode项目设置并检查您的归档操作是否使用了正确的配置文件 3.确保在Organizer要求时选择正确的配置文件.(如果上一步是正常的,那么这肯定是你的问题,所以双重或三重检查).

如果您希望确保使用正确的配置文件生成二进制文件,然后再将其提交到AppStore,请执行以下操作:

  1. 使用Finder打开二进制文件(首先,在Library/Developer/XCode/Archives/...中打开存档,右键单击它并"显示包内容",导航到/ Products/Applications/youApp,再次显示包内容),
  2. 查找文件embedded.mobileprovision并使用文本编辑器打开它
  3. 在二进制内容中,您应该能够本地化一些名为"application-identifier"和"aps-environment"的字段.检查它们是否具有正确的值.

我敢打赌,如果你检查以前存档的应用程序,你会看到不正确的个人资料.这是您的应用程序不返回deviceToken的唯一原因.(除非它收到它但没有正确发送到您的服务器,上面的通信的第2步中的问题).