生产模式下的推送通知未到来但在开发中它即将到来

时间:2013-11-09 05:16:38

标签: php ios ios5 apple-push-notifications

我的PNS在开发模式下运行良好。我使用raywendelich博客完成了这个。同样,我在生产模式下创建了证书,并从服务器运行相同的脚本,但没有收到任何通知。

当我们从我们的服务器进行生产模式测试时,还需要哪一步。非常迫切需要。请帮助您为生产模式做些什么。

我们的PHP代码

<?php

// Put your device token here (without spaces):
$deviceToken = 'd5d89cab86e6f1a3cfa66dd853f3f4d7dd932c4a6da793cb9c86d31e9cfcb31f';

// Put your private key's passphrase here:
$passphrase = '*******';

// Put your alert message here:
$message = '****';

 $ctx = stream_context_create();
 stream_context_set_option($ctx, 'ssl', 'local_cert', 'ckm.pem');
 stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

 // Open a connection to the APNS server
 $fp = stream_socket_client(
'ssl://gateway.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

 if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);

echo 'Connected to APNS' . PHP_EOL;

// Create the payload body
$body['aps'] = array(
'alert' => $message,
'sound' => 'default'
);

  // Encode the payload as JSON
 $payload = json_encode($body);

 // Build the binary notification
 $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload))   . $payload;

 // Send it to the server
 $result = fwrite($fp, $msg, strlen($msg));

 if (!$result)
echo 'Message not delivered' . PHP_EOL;
 else
echo 'Message successfully delivered' . PHP_EOL;

  // Close the connection to the server
  fclose($fp);

1 个答案:

答案 0 :(得分:0)

您需要创建生产APNS证书(非常类似于您创建开发人员证书的方式)并使用它来连接到Apple。开发和生产pushtokens是不同的,所以为了获得您的生产推送令牌,您将必须构建您的应用程序的AdHoc版本。当您在设备上安装ad-hoc版本时,它应该询问您是否要接收推送令牌。接受并且您的代码应该将生产推送令牌发送到您的服务器(我假设您将所有pushtokens保存在某个服务器上)。这是您需要用来测试生产推送代码的令牌。