我是靠谱客的博主 勤恳小笼包,最近开发中收集的这篇文章主要介绍php通知多有人,php – 从一个服务器推送多个应用的​​通知,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我不知道有什么问题,但是按照小代码为我工作。至少可以使用它来测试与APNS服务器的连接。

// your private key's passphrase

$passphrase = $_POST('passphrase');

$pemFilesPath = 'path/to/pem/folder/';

// path to pem file

$appCert = $_POST('pemfile');

$pemFile = $pemFilePath.$appCert;

$notifications = $_POST('notifications');

$ctx = stream_context_create();

stream_context_set_option($ctx, 'ssl', 'local_cert', $pemFile);

stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

// Open a connection to the APNS server

$fp = stream_socket_client(

'ssl://gateway.sandbox.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;

$records = 0;

foreach ($notifications as $deviceToken => $message)

{

// 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;

if (!$fp) {

exit("Connection intruptted " . E_USER_ERROR . PHP_EOL);

}

// Send it to the server

$result = fwrite($fp, $msg, strlen($msg));

if(!$result) {

print_r("Failed writing to stream.", E_USER_ERROR);

fclose($fp);

die;

}

/* uncomment this part for troubleshooting

else {

$tv_sec = 1;

$tv_usec = null; // Timeout. 1 million micro seconds = 1 second

$read = array($fp); $we = null; // Temporaries. "Only variables can be passed as reference."

$numChanged = stream_select($read, $we, $we, $tv_sec, $tv_usec);

if(false===$numChanged) {

print_r("Failed selecting stream to read.", E_USER_ERROR);

fclose($fp);

die;

}

else if($numChanged>0) {

$command = ord(fread($fp, 1));

$status = ord(fread($fp, 1));

$identifier = implode('', unpack("N", fread($fp, 4)));

$statusDesc = array(

0 => 'No errors encountered',

1 => 'Processing error',

2 => 'Missing device token',

3 => 'Missing topic',

4 => 'Missing payload',

5 => 'Invalid token size',

6 => 'Invalid topic size',

7 => 'Invalid payload size',

8 => 'Invalid token',

255 => 'None (unknown)',

);

print_r("APNS responded with command($command) status($status) pid($identifier).", E_USER_NOTICE);

if($status>0) {

$desc = isset($statusDesc[$status])?$statusDesc[$status]: 'Unknown';

print_r("APNS responded with error for pid($identifier). status($status: $desc)", E_USER_ERROR);

// The socket has also been closed. Cause reopening in the loop outside.

fclose($fp);

die;

}

else {

// Apple docs state that it doesn't return anything on success though

$records++;

}

} else {

$records++;

}

}

*/

$records++;

}

echo "Send notifications to $records devices";

// Close the connection to the server

fclose($fp);

?>

注意:很久以前写了这个小代码,它工作正常。我现在不记得来源,但有一个教程。最近没有测试过,所以你可能需要修改它。

一些建议:

>打开连接并写入服务器所有的通知,然后关闭它。

>读取服务器响应减少功能,但有助于故障排除和启动。因此,根据需要使用该部分。

>查看本文档以获取更多错误说明APNs Provider API

最后

以上就是勤恳小笼包为你收集整理的php通知多有人,php – 从一个服务器推送多个应用的​​通知的全部内容,希望文章能够帮你解决php通知多有人,php – 从一个服务器推送多个应用的​​通知所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部