发送多个iPhone推送通知+ APNS + PHP

我正在开发一个PHP网站+

iPhone应用程序和iPhone应用程序API,具有一个面向学生和医生的消息传递系统,当任何一个人(从网站或iPhone)发送消息时,另一个用户应在其iPhone上获得推送通知。例如,如果学生为老师添加了一个新问题,则老师iPhone

/ iPad上的推送通知将发送给老师,并且当老师回复学生的答案时,学生会收到推送通知。

由于对在网站上注册的师生人数没有限制,我的问题是如何将推送消息发送到注册用户的iPhone?我想在有人回复或添加问题后立即发送推送消息。请向我提供用于发送多个推送消息的PHP代码。我在注册时为每个用户保存设备令牌。

当老师回答问题时,我也要向学生发送邮件,我也想向学生发送推送通知,反之亦然,因此请指定能够管理错误情况的代码。

回答:

这是我终于做到的方式

  1. 下载的apns-php
  2. PHP代码
    set_time_limit(0);

    $root_path = "add your root path here";

    require_once($root_path."webroot\cron\library\config.php");

    require_once($root_path."Vendor\ApnsPHP\Autoload.php");

    global $obj_basic;

    // Basic settings

    $timezone = new DateTimeZone('America/New_York');

    $date = new DateTime();

    $date->setTimezone($timezone);

    $time = $date->format('H:i:s');

    //Get notifications data to send push notifications

    $queueQuery = " SELECT `notifications`.*, `messages`.`mes_message`, `messages`.`user_id`, `messages`.`mes_originated_from` FROM `notifications`

    INNER JOIN `messages`

    ON `notifications`.`message_id` = `messages`.`mes_id`

    WHERE `notifications`.`created` <= NOW()";

    $queueData = $obj_basic->get_query_data($queueQuery);

    if(!empty($queueData)) {

    // Put your private key's passphrase here:

    $passphrase = 'Push';

    $ctx = stream_context_create();

    stream_context_set_option($ctx, 'ssl', 'local_cert', 'server_certificates_bundle_sandbox.pem');

    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 '<br>'.date("Y-m-d H:i:s").' Connected to APNS' . PHP_EOL;

    foreach($queueData as $val) {

    // Put your device token here (without spaces):

    $deviceToken = $val['device_token'];

    // Create message

    // Get senders name

    $sql = "SELECT `name` FROM `users` WHERE id =".$val['user_id'];

    $name = $obj_basic->get_query_data($sql);

    $name = $name[0]['name'];

    $message = $name." : ";

    // Get total unread messaged for receiver

    $query = "SELECT COUNT(*) as count FROM `messages` WHERE mes_parent = 0 AND user_id = ".$val['user_id']." AND mes_readstatus_doc != 0 AND mes_status = 1";

    $totalUnread = $obj_basic->get_query_data($query);

    $totalUnread = $totalUnread[0]['count'];

    $message .= " This is a test message.";

    // Create the payload body

    $body['aps'] = array(

    'alert' => $message,

    'badge' => $totalUnread,

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

    // Send it to the server

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

    if (!$result) {

    echo '<br>'.date("Y-m-d H:i:s").' Message not delivered' . PHP_EOL;

    } else {

    $sqlDelete = "DELETE FROM `notifications` WHERE id = ".$val['id'];

    $query_delete = $obj_basic->run_query($sqlDelete,'DELETE');

    echo '<br>'.date("Y-m-d H:i:s").' Message successfully delivered' . PHP_EOL;

    }

    }

    // Close the connection to the server

    fclose($fp);

    echo '<br>'.date("Y-m-d H:i:s").' Connection closed to APNS' . PHP_EOL;

    } else {

    echo '<br>'.date("Y-m-d H:i:s").' Queue is empty!';

    }

以上是 发送多个iPhone推送通知+ APNS + PHP 的全部内容, 来源链接: utcz.com/qa/401427.html

回到顶部