0

I'm currently in development mode and have created all certificates for development, an app id and a certificate for the APNS. ALl have been downloaded and installed on the keychain and the .p12 has been installed in the Server.

All of the devices on the provisioning profile have the app installed and none are receiving the notification.

All ports are open and it has been also tested with a simple php app and it works, but not from the server.

What is missing?

4

1 回答 1

0

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

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

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

您还应该在服务器端放置一些健康检查(在 .php 或您用来建立连接的任何内容中gateway.push.apple.com),以确保您的服务器实际上正在发送任何内容。IE 如果您使用 mysql 来访问您的令牌,请记下 aif(!$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 的沙盒系统时使用生产配置文件向我的设备发送通知,但没有收到任何东西。您说您的证书是“开发”,请仔细检查其他所有内容。

再说一次,我的服务器上有这个 .php 代码,我不完全确定你所说的“简单的 php-app 有效,但服务器无效”是什么意思。

于 2013-08-15T22:50:06.527 回答