我已正确设置配置文件和应用程序以接收推送通知,但我正在努力使用PHP to send the notification
。我正在使用下面概述的脚本,但收到此警告:
Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Connection refused).
我对这个问题进行了大量研究,但我不确定如何解决这个问题。任何想法都会非常有帮助。谢谢大家!
<?php
$message=$_POST['message'];
if ($message)
{
$device_token = "TOKEN_HERE";
$payload = '{
"aps": {
"badge": 1,
"alert": "Hello world!",
"sound": "bingbong.aiff"
}
}';
$ctx = stream_context_create();
stream_context_set_option ($ctx, 'ssl', 'local_cert', 'PEM_FILE_HERE' );
stream_context_set_option ($ctx, 'ssl', 'passphrase', 'PASSPHRASE_HERE' );
$fp = stream_socket_client ('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr,
60, STREAM_CLIENT_CONNECT, $ctx);
if (!$fp) {
print "Failed";
return;
}
else {
print "Sent";
}
$devArray = array();
$devArray[] = $deviceToken;
foreach($devArray as $deviceToken) {
$msg = chr(0) . pack("n",32) . pack ('H*', str_replace(' ', '', $deviceToken)) . pack
("n",strlen($payload)) . $payload . "n";
print "Sending Message :" . $payload . "n";
fwrite($fp,$msg);
}
fclose($fp);
}
?>
<form action="" method="post">
<input type = "text" name = "message">
<input type = "submit" value = "Send Notification">
</form>
答案 0 :(得分:0)
这是一个工作脚本
class Send_Push_Apple
{
public $apnsCert = 'PushProductionCertificatesWithKey.pem';
function __construct()
{
/*
* Nothing to fo Here
*
* */
}
static function send_push($data=array())
{
$payload['aps'] = array('alert' => array('body' => $data['message']));
$payload['aps']['badge'] = 1;
$payload['aps']['sound'] = 'default';
$payload = json_encode($payload);
//For development
//$deviceToken = '4e6ec248724ef635e#############################';
$deviceToken = $data['device_token'];
//$apnsCert = 'DistPEMCertificate-05-05.pem';
$streamContext = stream_context_create();
//stream_context_set_option($streamContext, 'ssl', 'local_cert',$apnsCert);
$apnsCert = 'PushProductionCertificatesWithKey.pem';
stream_context_set_option($streamContext, 'ssl', 'local_cert',$apnsCert);
//ssl://gateway.sandbox.push.apple.com:2195
$apns = stream_socket_client('ssl://gateway.push.apple.com:2195', $error, $errorString, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $streamContext);
if (!$apns) {
print "Failed to connect $error $errorString\n";
return;
} else {
print "Connection OK";
}
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;
if(fwrite($apns, $apnsMessage))
{
echo "Message send Successfully";
}
else
{
echo "Message Sending Fail";
}
fclose($apns);
}
}
这里有3个IMP要考虑的事项
1)必须在服务器上启用端口2195
2)特定申请的证书
3)需要设备令牌