代码之家  ›  专栏  ›  技术社区  ›  James Harpe

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

  •  17
  • James Harpe  · 技术社区  · 12 年前

    我的应用现在在应用商店中可用,因此我已将其下载到我的设备。推送通知在开发期间运行良好。我正在使用JavaPNS发送通知,我已经将其切换为指向苹果的生产服务器。

    然而,我现在从APNS服务器收到一个无效令牌错误。

    我将存档方案设置为“发布”,并将“发布”设置为使用此分发配置文件:

    enter image description here

    在该配置文件中,您可以看到我已正确设置了环境:

    enter image description here

    然而,我还是犯了错误。当我查看数据库时,我认为应用程序返回给我的设备令牌与开发令牌相同,因此这可能是问题所在。但我不知道它为什么会返回,因为应用程序的签名正确。这是我用来测试的设备,这会有问题吗?关于这里发生了什么,还有其他想法吗?

    谢谢

    编辑:我没有在代码中存储令牌,Eran的回答表明,唯一的其他可能性是我的数据库中有一个旧令牌,或者应用程序没有被生产配置文件签名。我已经清空了我的数据库,所以我知道它不是前者,至于后者,我不知道情况会如何,因为我只有一个分发配置文件,正如我上面所示,它正确设置了“aps环境”键。XCode甚至不允许我使用应用商店提交的开发配置文件,是吗?其他几种可能性:

    我发送通知的密钥是否有问题,可能会导致“无效令牌”?如果是,我可以为现有配置文件重新生成此密钥吗?

    AppID中是否包含另一个用于推送通知的配置文件?该问题是否会导致无效令牌错误?

    6 回复  |  直到 12 年前
        1
  •  20
  •   James Harpe    12 年前

    我重新下载了推送生产证书,并将其从密钥链导出为.p12。这似乎解决了问题。但似乎奇怪的是,一个坏的私钥给了我“无效令牌”错误。

        2
  •  18
  •   Eran    12 年前

    用于生产的设备令牌与开发令牌不同,因此如果您向生产APNS服务器发送开发令牌(反之亦然),这就是问题的原因。

    切换到生产模式时,您可能没有从服务器中删除开发设备令牌。

    或者,如果您正在从生产应用程序获取开发令牌,则应用程序将返回本地存储的设备令牌(您可能在开发期间已存储在设备上),而不是要求Apple获取新的令牌,或者(如果您确实要求Apple获取当前令牌,但仍获得开发令牌)您的应用程序未与生产配置文件进行签名。

        3
  •  3
  •   Lewis Edward Garrett    9 年前

    MyApp是一个iOS应用程序,它使用从数据库获取的APN令牌ID向MyApp发送和接收推送通知MyApp,每个MyApp在登录时都会保持更新。推送通知由MyApp使用 NW推进器 框架API。

    只要项目在开发人员(调试)模式下运行,发送和接收推送通知就可以完美工作。但是,在生产模式下,发送推送通知将不起作用。

    我回去重新创建了我的AppID、SSL证书、规定等,但没有效果。接下来我使用 NW推进器 苹果操作系统 推进器 应用程序尝试向MyApp发送推送通知。我已配置 推进器 发送推送通知(发送到 特设 MyApp的分发),并在 推进器 日志:“ 通知错误:APN无效令牌 ".

    我接下来注意到 推进器 具有复选框选项 应使用沙盒环境 选中的。我取消选中该选项并再次尝试。这一次,推送通知被发送,然后被目标手机接收,没有任何错误。这让我重新审视了 NWPusher.connect(NWPusher.connect) 电话:

    斯威夫特:

                let pusher:NWPusher? = try? NWPusher.connect(withPKCS12Data: pkcs12! as Data, password:APNS_Certificate_Password,environment:NWEnvironment(rawValue:1)!)
    

    它有一个环境参数NWEnvironment枚举,可能值为0=无,1=沙盒,2=生产,3=自动。

    将rawValue:1(开发沙盒)更改为rawValue:2(生产)解决了问题:生产推送通知现在可以无错误地工作。

        4
  •  2
  •   phantom_2    9 年前

    xCode 8.0(x代码8.0)

    安装xCode 8.0后,我出现了“无效令牌”错误。 问题在此处找到:项目导航器->选择项目(最上面的项目)->在“目标”菜单中选择项目名称->选择顶部菜单中的功能->查看PUSH通知部分->单击“修复问题” enter image description here

        5
  •  0
  •   pradeep sg    10 年前

    找到了此问题的根本原因,这是因为私钥错误。要解决此问题,只需使用.pem生成.p12证书。要使用.pem文件创建p12文件,请遵循以下方法 Steps to follow

        6
  •  0
  •   phil    8 年前

    在中的ios App Bundle ID菜单下 https://developer.apple.com/account/ios/identifier/bundle

    如果在生产中,请单击应用程序的id,如果旧证书已过期,请添加新证书。

    确保您的应用程序捆绑包ID com.myapp.mycom 与您的证书名称匹配 com.myapp.mycom公司

    推荐文章