Php 苹果推送通知系统未收到消息!(菲律宾)
这是我用来发送苹果推送通知的代码。 在device_令牌中,我将发送一个数组,其中包含我要发送消息的所有令牌。 由于某种原因,我停止接收来自此系统的消息 它以前也有用Php 苹果推送通知系统未收到消息!(菲律宾),php,ios,iphone,Php,Ios,Iphone,这是我用来发送苹果推送通知的代码。 在device_令牌中,我将发送一个数组,其中包含我要发送消息的所有令牌。 由于某种原因,我停止接收来自此系统的消息 它以前也有用 private function send_iphone_notification($device_tokens, $message) { define("PRODUCTION_MODE", true); $apnsPort = 2195; // Choose dev or production ap
private function send_iphone_notification($device_tokens, $message)
{
define("PRODUCTION_MODE", true);
$apnsPort = 2195;
// Choose dev or production apns host and certificate
if(PRODUCTION_MODE) {
$apnsHost = 'gateway.push.apple.com';
$apnsCert = $_SERVER['DOCUMENT_ROOT'].'/ant/www/apns/PushIphone.pem';
} else {
$apnsHost = 'gateway.sandbox.push.apple.com';
$apnsCert = $_SERVER['DOCUMENT_ROOT'].'/ant/www/apns/CertificatesDev.pem';
}
// Notification content
$payload = json_encode(array('notification_from_panel' => 1, 'aps' => array('alert' => $message, 'badge' => 1, 'sound' => 'default')));
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
stream_context_set_option($streamContext, 'ssl', 'passphrase', "");
// loop all devices tokens
foreach ($device_tokens as $device_token)
{
try {
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
} catch(Exception $e) {
echo $e->getMessage();
continue;
}
$deviceToken = str_replace(" ","",substr($device_token,1,-1));
//echo $deviceToken;
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(mb_strlen($payload)) . $payload;
fwrite($apns, $apnsMessage);
//socket_close($apns);
fclose($apns);
}
}
我对苹果的推送服务有一些经验,我不得不说苹果似乎有soem限制 首先,您不需要为每条消息关闭和打开套接字连接。那会节省你很多时间。另一方面,在发送下一条消息之前,您必须检查连接是否中断 不管怎样,当你每秒连接100次并发送信息时,苹果似乎并不太喜欢它。在过去的几年里,苹果公司也因此阻止了我 但是,当您使用已建立的连接发送消息,并且在某个点连接返回错误/断开连接时,您不知道他是在什么消息处停止的。但是,您可以为每条消息定义一个标识符,并检查连接中断时返回的错误 我注意到苹果服务器返回错误时有几秒钟的延迟。这使得我们很难用简单的方法来处理它 我已经写了一个类来处理所有这些,但是没有时间发布它!如果您对它感兴趣,请在以下位置查看github项目: 我希望很快完成文档