我目前处于开发模式,并为APNS创建了所有开发证书,应用ID和证书。 ALl已下载并安装在钥匙串上,并且.p12已安装在服务器中。
配置文件中的所有设备都安装了应用程序,但没有人收到通知。
所有端口都已打开,并且还使用简单的php应用程序进行了测试,但它可以正常运行,但不是来自服务器。
缺少什么?
答案 0 :(得分:0)
说它正在使用'一个简单的php应用程序',这有点模糊。有了关于服务器上的事件流和'php app'之间差异的更多信息,我们可能会得出一些更合理的结论。
除此之外,如果你还没有,请查看来自raywenderlich的Ali Hafizji的this精彩教程(两部分)。它有几乎所有你需要的详细解释,我自己曾经使用过几次(看起来它已经被更新了)。你说你在服务器上安装.p12,而我很确定他将它与私钥一起转换为.pem文件。
还要确保服务器使用正确的令牌,因为您的设备令牌在开发中与发布时的令牌不同。
您还应该在服务器端(在.php或用于建立与gateway.push.apple.com
的连接的任何内容)中放置一些运行状况检查,以确保您的服务器实际上正在发送任何内容。
如果您使用mysql访问您的令牌,请放下if(!$connection){die(mysql_error());}
或其他内容。在建立与Apple的连接时也应该这样做。使用php和stream_socket_client,您可以输入以下内容:
$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。
还要确保您已连接到要使用的系统(沙箱与否)。我可能会离开这里,但我想我曾经尝试在连接到Apple的Sandbox系统时使用生产配置文件向我的设备发送通知,但没有收到任何信息。你说你的证书是'开发',仔细检查其他一切都是。
然后,我在我的服务器上有这个.php代码,而且我不完全确定你的'简单的php-app有效,但服务器没有'。