iOS未接收推送通知

iOS未接收推送通知,ios,push-notification,Ios,Push Notification,我目前处于开发模式,已创建所有用于开发的证书、应用程序id和APN证书。所有这些都已下载并安装在钥匙链上,并且.p12已安装在服务器上 资源调配配置文件上的所有设备都已安装应用程序,但没有一个设备接收到通知 所有端口都是开放的,并且已经用一个简单的php应用程序进行了测试,它可以工作,但不能从服务器上运行 缺少什么?说它正在使用“一个简单的php应用程序”有点模糊。有了更多关于服务器上事件流和“php应用程序”之间差异的信息,我们可能会得出一些更合理的结论 除此之外,如果您还没有,请查看rayw

我目前处于开发模式,已创建所有用于开发的证书、应用程序id和APN证书。所有这些都已下载并安装在钥匙链上,并且.p12已安装在服务器上

资源调配配置文件上的所有设备都已安装应用程序,但没有一个设备接收到通知

所有端口都是开放的,并且已经用一个简单的php应用程序进行了测试,它可以工作,但不能从服务器上运行


缺少什么?

说它正在使用“一个简单的php应用程序”有点模糊。有了更多关于服务器上事件流和“php应用程序”之间差异的信息,我们可能会得出一些更合理的结论

除此之外,如果您还没有,请查看raywenderlich的Ali Hafizzi的精彩教程(两部分)。它对你所需要的几乎所有东西都有详细的解释,我自己也用过几次(看起来从那时起它就被更新了)。你说你正在服务器上安装.p12,而我很确定他正在将它与私钥一起转换为.pem文件

还要确保服务器使用了正确的令牌,因为您的设备的令牌在开发中与在分发中的令牌不同

您还应该在服务器端进行一些运行状况检查(在.php或用于建立到
gateway.push.apple.com
的连接的任何文件中),以确保您的服务器确实发送了任何内容。 也就是说,如果你使用mysql访问你的令牌,写下一个
if(!$connection){die(mysql_error();}
之类的东西。在建立与苹果的连接时也应这样做。使用php和stream_socket_客户端,您可以放置如下内容:

$fp = stream_socket_client(
    'ssl://gateway.push.apple.com:2195', $err,
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);//$ctx=Stream context

if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);
通知的实际推送,或者至少是我一直使用的php方式,
fwrite()
返回一个布尔值,表示它是否成功,因此您可以执行
$result=fwrite($fp,$msg,strlen($msg)),如果失败,
$result
将为0

还要确保您已连接到要使用的系统(沙箱或非沙箱)。我可能离这里很远,但我想我曾经在连接到苹果的沙盒系统时尝试用产品配置文件向我的设备发送通知,但没有收到任何通知。你说你的证书是“开发”的,再检查一下其他的东西是否也是


再说一遍,我的服务器上有这个.php代码,我不完全确定您所说的“简单php应用程序工作,但服务器不工作”是什么意思。

当您说它与简单php应用程序工作,但不是来自服务器时,您的意思是什么?Thanxs提供了很多帮助,现在收到了推送通知。该教程就是我开始学习的地方。我基本上处于这种状态,无法接收通知。@RichardBronosky请确保您使用的是开发资源调配配置文件并连接到sandbox.gateway,或者使用分发资源调配配置文件并连接到gateway。据我所知,混合这些将不起作用(即连接到具有分发配置文件的沙盒)。您已经在开发中心激活了AppID的推送通知了吗?我从头开始,第一次就得到了推送通知。我从来没有让它在我试图改装的原始应用程序上工作过。这一定与事情的顺序有关。在某个时候,我会删除所有的资源调配,并按照教程的顺序重新创建它。@RichardBronosky实际上,这也是我第一次做的。我在个人资料和目标/项目中遇到了当时无法处理的麻烦。我最终创建了一个新的项目,试图让通知在那里工作,它做到了,就像你一样。我没有发现我做了什么不同,所以我最终把原来的项目改成了这个新项目,而不是反过来。如果你原来的项目规模很大,那么这可能是一项巨大的工作,所以你可能想先再试一次,是的。祝你好运