[英]For IOS push how to send an array message
作为参数传递的消息是一个数组,但是推送没有被发送,而如果我发送了一个字符串,则推送被成功发送到了IOS。
public function sendIosPush($registatoin_ids, $message) {
set_time_limit(0);
$this->logger->write("INFO :","message for IOS PUSH".$message);
header('content-type: text/html; charset: utf-8');
$passphrase = '******';
$deviceIds=$registatoin_ids;
$body['aps'] = array('alert' => $message);
//$payload = '{"aps":{"alert":"' . $message . '","sound":"default"}}';
//$result = 'Start' . '<br />';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
foreach ($deviceIds as $item) {
//sleep(1);
$fp = stream_socket_client($this->iosServer, $err, $errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx);
// Build the binary notification
$payload = json_encode($body);
$this->logger->write("INFO :","message for IOS PUSH".$payload);
$msg = chr(0) . pack('n', 32) . pack('H*', $item) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if ($fp) {
fclose($fp);
}
}
//set_time_limit(30);
}
您可以使用JSON传输邮件...。
收到消息后,您可以解码JSON并将其解析为数组或任何您想要的东西。
如果您不想要JSON,也可以使用xml ...
要在php中转换为json,可以使用json_encdoe
函数。
更新:这应该是您想要的:
public function sendIosPush($registatoin_ids, $message) {
if(!is_array($message))
$message=array($message);
set_time_limit(0);
$this->logger->write("INFO :","message for IOS PUSH".$message);
header('content-type: text/html; charset: utf-8');
$passphrase = '******';
$deviceIds=$registatoin_ids;
$body['aps'] = array(
'alert' => json_encode($message),
'sound'=>"default");
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
foreach ($deviceIds as $item) {
$fp = stream_socket_client($this->iosServer, $err, $errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx);
// Build the binary notification
$payload = json_encode($body);
$this->logger->write("INFO :","message for IOS PUSH".$payload);
$msg = chr(0) . pack('n', 32) . pack('H*', $item) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if ($fp) {
fclose($fp);
}
}
//set_time_limit(30);
}
function sendPushiOS($deviceToken, $pushMessage, $urlLink, $alertType)
{
$iosServer='ssl://gateway.sandbox.push.apple.com:2195';
$deviceTokens = $deviceToken;
$passphrase = '****';
$urlis = $urlLink;
$pushId = uniqid();
$result = htmlspecialchars_decode($pushMessage) . "\r\n" . htmlspecialchars_decode($urlis);
$message = $result;
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
$body['aps'] = array(
'alert' => $message,
'sound' => 'busy.wav',
'URL' => $urlis,
'pushMsgId' => $pushId
);
foreach ($deviceTokens as $udid)
{
$fp = stream_socket_client($iosServer, $err,$errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx);
$payload = json_encode($body);
if (!$fp)
{
exit("Failed to connect: $err $errstr" . PHP_EOL);
}
$msg = chr(0) . pack('n', 32) . pack('H*', $udid) . pack('n', strlen($payload)) . $payload;
$result = fwrite($fp, $msg, strlen($msg));
if ($fp)
{
fclose($fp);
}
if (!$result)
{
echo "<br/>" . 'Message not delivered' . PHP_EOL;
}
}
}
$ deviceTokens是设备令牌的数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.