[英]Apple Push PHP: No all notifications received
我有一個帶MySQL數據庫的PHP腳本,用於Apple Push Notification。 該腳本有效,但並非所有通知都會收到其通知。 怎么了
<?PHP
$db_user = "xx_fw"; // Gebruiker voor MySQL
$db_pass = "xxx"; // Wachtwoord voor MySQL
$db_host = "localhost"; // Host voor MySQL; standaard localhost
$db_db = "xx_fw"; // Database
// Als je al ergens anders een database connectie hebt gemaakt,
// maak dan van de volgende twee regels commentaar (# of // ervoor zetten)
mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_db);
$query = mysql_query("SELECT * FROM iospush");
$deviceToken = ARRAY();
while ($row = mysql_fetch_array($query)) {
$deviceToken[] = $row["token"];
}
if($_POST['politie']){
$message = stripslashes($_POST['message']);
$politiemessage = "POLITIEBERICHT: ".$message;
$payload = '{
"aps" :
{ "alert" : { "body" : "'.$politiemessage.'" },
"badge" : 1,
"sound" : "politiepush.wav"
}
}';
$ssl='ios-ssl.pem';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $ssl);
stream_context_set_option($ctx, 'ssl', 'passphrase', 'xxx');
$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
if(!$fp){
print "Failed to connect $err $errstrn";
return;
} else {
print "Notifications sent!";
}
$devArray = array();
$devArray[] = $deviceToken;
foreach($deviceToken as $token){
$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $token)) . pack ("n",strlen($payload)) . $payload;
print "sending message :" . $payload . "n";
fwrite($fp, $msg);
echo "<br><br>";
echo "Verstuurd aan: ".$token;
echo "<br><br>";
}
fclose($fp);
} else if($_POST['message']){
$message = stripslashes($_POST['message']);
$payload = '{
"aps" :
{ "alert" : { "body" : "'.$message.'" },
"badge" : 1,
"sound" : "chime"
}
}';
$ssl='ios-ssl.pem';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $ssl);
stream_context_set_option($ctx, 'ssl', 'passphrase', 'xxx');
$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
if(!$fp){
print "Failed to connect $err $errstrn";
return;
} else {
print "Notifications sent!";
}
$devArray = array();
$devArray[] = $deviceToken;
foreach($deviceToken as $token){
$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $token)) . pack ("n",strlen($payload)) . $payload;
print "sending message :" . $payload . "n";
fwrite($fp, $msg);
echo "<br><br>";
echo "Verstuurd aan: ".$token;
echo "<br><br>";
}
fclose($fp);
}
?>
是發送推送的問題,還是在蘋果方面出錯了? 謝謝!
試試下面的代碼:
$body['aps'] = array('alert' => $message);
if ($badge)
$body['aps']['badge'] = $badge;
if ($sound)
$body['aps']['sound'] = $sound;
/* End of Configurable Items */
$ctx = stream_context_create();
$a = stream_context_set_option($ctx, 'ssl', 'local_cert', dirname(__FILE__).'\push.pem');
// assume the private key passphase was removed.
// stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
//$status = array();
$status = '';
if ($fp) {
$status = "Notification sent successfully."; //$message;
} else {
$status = "Failed to sent notification.";
//
}
$payload = json_encode($body);
$msg = @(chr(0) . pack("n",32) . pack('H*', str_replace(' ','' , $deviceToken)) . pack("n",strlen($payload)) . $payload);
if($msg)
{
fwrite($fp, $msg);
if (!extension_loaded('openssl')) {
}
}
echo $status;
?>
注意#請為iOS使用正確的.pem文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.