这是我终于做到的方式
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 ''.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 ''.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 ''.date("Y-m-d H:i:s").' Message successfully delivered' . PHP_EOL; } } // Close the connection to the server fclose($fp); echo ''.date("Y-m-d H:i:s").' Connection closed to APNS' . PHP_EOL; } else { echo ''.date("Y-m-d H:i:s").' Queue is empty!'; }