繁体   English   中英

对于IOS推送如何发送数组消息

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM