Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 应用程序从应用程序商店返回设备令牌的空值_Objective C_Ios_Xcode_Push Notification - Fatal编程技术网

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

Objective c 应用程序从应用程序商店返回设备令牌的空值,objective-c,ios,xcode,push-notification,Objective C,Ios,Xcode,Push Notification,我发布了带有推送通知的应用程序更新,但是当我检查服务器时,我注意到发送到数据库的令牌为“null”。我使用开发证书和生产证书进行了大量测试。两者都很成功,但应用商店上的版本没有,我也不知道为什么。大约两周前,我发布了关于此问题的帖子,有人告诉我不应该使用我用于临时设置的配置文件,因此我创建了一个具有相同id的新配置文件。更新昨天发布,但我仍然存在相同的问题。我需要找到一个永久的解决方案,因为我的用户对所有这些更新都很恼火,但我不知道如何测试,直到它在应用商店上得到批准 如果有人能提供想法或帮助,

我发布了带有推送通知的应用程序更新,但是当我检查服务器时,我注意到发送到数据库的令牌为“null”。我使用开发证书和生产证书进行了大量测试。两者都很成功,但应用商店上的版本没有,我也不知道为什么。大约两周前,我发布了关于此问题的帖子,有人告诉我不应该使用我用于临时设置的配置文件,因此我创建了一个具有相同id的新配置文件。更新昨天发布,但我仍然存在相同的问题。我需要找到一个永久的解决方案,因为我的用户对所有这些更新都很恼火,但我不知道如何测试,直到它在应用商店上得到批准

如果有人能提供想法或帮助,我将不胜感激。提前谢谢


另外,如果有帮助的话,我从我的设备上删除了我的应用程序,并从应用程序商店重新安装了它。。。它没有询问我是否希望接收推送通知,但已通过电话设置为应用程序启用推送功能…

如果您已为应用程序创建了新的配置文件,我认为您还需要在服务器上生成新证书。

您使用的是gateway.push.apple.com而不是gateway.sandbox.push.apple.com吗?

APNs通信有三个步骤:

  • 您的应用注册以在iOS内的appDelegate中接收APN。这将为您提供一个deviceToken,您应该使用它发送通知
  • 您的应用程序将deviceToken发送到您的管理服务器
  • 您的管理服务器与Apple APNs服务器连接以发送推送通知
  • 在您的情况下,我理解您的问题出现在步骤1中,因为您说您有一个空的设备id,并且应用程序没有询问您关于APNs权限的问题。因此,更改服务器证书或从gateway.sandbox.push.apple.com切换到gateway.push.apple.com不会有帮助,因为错误以前就发生过

    这显然是您的证书有问题。您应该检查您是否已在您的苹果iOS资源调配门户中完成了所有必需的步骤:

  • 使用应用程序的捆绑标识创建一个AppId。避免使用诸如*之类的通配符
  • 为应用程序配置InApp购买选项(这不是问题,因为用于通信中的步骤3)
  • 为使用1中使用的AppId的分发创建一个配置文件。(我怀疑这可能是你的问题),下载它
  • 打开XCode项目设置并检查存档操作是否使用了正确的配置文件,该配置文件是在3中加载的。当组织者要求时,请确保您选择了正确的一个。(如果上一步没有问题,那么这肯定是你的问题,所以请仔细检查)
  • 如果要在再次提交到AppStore之前确保生成的二进制文件具有正确的配置文件,请执行以下操作:

  • 使用Finder打开二进制文件(首先,在Library/Developer/XCode/Archives/…打开归档文件,右键单击它并“显示包内容”,导航到/Products/Applications/youApp,再次显示包内容)
  • 查找embedded.mobileprovision文件并用文本编辑器打开它
  • 在二进制内容中,您应该能够本地化两个名为“应用程序标识符”和“aps环境”的字段。检查它们是否具有正确的值

  • 我敢打赌,如果你检查你以前存档的应用程序,你会看到一个不正确的配置文件这是您的应用程序不返回deviceToken的唯一原因。(除非它接收到设备但未正确发送到服务器,这是上述通信步骤2中的一个问题)。

    如果您可以在“控制台应用程序”(管理器>设备>控制台)中检查应用程序日志通过将安装的设备与包含设备令牌null问题的应用程序连接


    • 基于此

      问题是由于当前的配置配置文件不包含 APNS信息,如之前创建的配置文件 正在创建APNS证书

      解决方案:创建新的配置文件并在Xcode中选择配置文件将清除错误

    • 您可以执行terminal命令来检查“临时生产” profile'是否支持apns环境,其外观应类似于以下内容:

    安全cms-D-i您的AppStoreDistribution.mobileprovision的路径

    <key>Entitlements</key>
    <dict>
        <key>application-identifier</key>
        <string>H22LLUHM4D.com.company.appName</string>
        <key>aps-environment</key>
        <string>production</string>
        <key>get-task-allow</key>
        <false/>
    </dict>
    
    权利
    应用程序标识符
    H22LLUHM4D.com.company.appName
    aps环境
    生产
    获取任务允许
    
    否证书链接到Appid而不是应用程序provison@StevenKramer有很多代码。如果它适用于ad hoc,为什么它不适用于app store?我觉得没有代码是必要的?嗯,是的,但是这里有一个bug。无论是在代码中还是在系统框架中。文档中说“当应用程序成功注册到Apple Push Service(APS)时发送给代理。”整个过程取决于APN和操作系统之间交换的有效设备令牌。我认为在apple developer portal中启用生产推送通知后,您需要重新生成p12文件。他如何提交具有错误分发配置文件的应用程序?它会被iTunes拒绝,不是真的。它可以是正确的配置文件,但使用通配符作为绑定ID。这将正常工作,但不适用于APN。事实上,在部署支持APNs的应用程序时,这是一个非常常见的问题。我使用gateway.push.apple.com。。。谢谢,虽然我知道这是一个典型的错误。顺便说一句,我很确定如果是的话,它不会为临时工作。沙盒