iOS推送通知在开发环境下可用但在生产环境下不可用

3

首先,我要说我已经寻找解决方案几个小时了。我已经阅读了几乎所有与此相关的SO问题,但没有一个解决方案可行。我也阅读了官方的苹果文档和一些其他教程。基本上,我说这话是为了避免显而易见的建议,比如(确保不是“沙盒”等)。

我在预配门户中为我的应用程序拥有开发和生产推送通知证书。我已经按照苹果自己的文档步骤创建了dev和prod pem文件。

我同时拥有与此应用程序关联的dev和adhoc分发预配描述文件。

我可以使用dev配置文件直接从xcode构建应用程序到设备上,也可以使用adhoc分发配置文件对其进行归档(然后使用beta builder来安装到设备上)。

当使用沙盒和dev pem文件时,无论是直接使用dev配置文件还是使用adhoc配置文件(通过beta builder),推送通知都可以正常工作。但是,一旦我测试使用prod服务器和prod pem文件,推送通知就无法发送。

我有两个用于测试的php脚本,一个用于dev,一个用于prod。它们本质上是相同的,除了服务器url(沙盒与非沙盒)和引用的pem文件(dev或prod)。

我觉得即使使用adhoc构建,我仍然可以使用沙盒和dev pem发送推送通知,这是正常的吗?

在从开发到生产过程中,还有其他事情我应该做吗?我觉得我已经尝试了所有的办法。我多次重新生成了证书和描述文件。我几乎按照相同的过程为生成dev和prod pem文件,而我的php脚本也非常相似(针对prod和dev)。

我不知道这是服务器问题还是客户端(应用程序)问题?我是否遗漏了某个设置?

希望有人能为此提供一些帮助,因为它开始让我疯狂了!

谢谢!

2个回答

11

我找到了问题的原因,这是我的一个愚蠢的错误。我会在这里分享,以防其他人犯同样的错误。

我不知道的关键事情是,相同设备的开发和生产环境下使用的设备令牌是不同的。我在开发环境中测试时使用的设备令牌,用于在生产环境下进行测试。在开发环境中这样可以正常工作,但当我切换到生产环境时,我仍然在php脚本中使用相同的设备令牌(错误地假设相同设备的设备令牌是相同的),但实际上在生产环境中注册的设备令牌是不同的。

实际上不会出现这种情况,因为设备令牌会被发送到服务器,但我在测试时使用硬编码的设备令牌,因为我不想涉及服务器。

希望这能避免其他人的困扰。


我现在正在苦苦挣扎。我加入了一个项目,推送通知在开发环境中工作正常,但是现在我已经在AppStore上获得了应用程序的批准,它们不再工作了。AppID是否对全球每个用户都相同?还是它是由您的手机生成并与您的设备特定匹配的东西? - Ethan Parker

0

我遇到了类似的问题,我在一个已有的应用程序中添加了推送通知,在使用Xcode将其运行到我的设备上进行测试时,它运行良好,但是当我创建存档并通过iTunes安装时,它无法接收推送通知。 问题在于,当我添加推送通知权限时,我的预配文件变得过时(无效),因此我不得不生成一个新的预配文件,并将其应用于我的iTunes/手机,现在当我安装该应用程序时,它可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接