這是我第一次在App中使用推送通知。我已經通過示例應用程序以及書籍瞭解瞭如何將推送通知發送到單個設備。但是,我的程序發送推送通知給多個設備。我使用'PushMeBaby'應用程序進行服務器端編碼。 請幫我一把。 在此先感謝。如何將推送通知發送到多個設備?
22
A
回答
28
嘗試此示例代碼並根據您的環境進行修改。
$apnsHost = '<APNS host>';
$apnsPort = <port num>;
$apnsCert = '<cert>';
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext);
$payload['aps'] = array('alert' => 'some notification', 'badge' => 0, 'sound' => 'none');
$payload = json_encode($payload);
// Note: $device_tokens_array has list of 5 devices' tokens
for($i=0; $i<5; $i++)
{
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device_tokens_array[i])) . chr(0) . chr(strlen($payload)) . $payload;
fwrite($apns, $apnsMessage);
}?>
這篇文章可以幫助驗證點連接和連接狀態:Apple Push Notification: Sending high volumes of messages
其他參考鏈接:
How can I send push notification to multiple devices in one go in iPhone? 和 how to handle multiple devices when using Push Notification?
2
我發現,你必須創建一個新的stream_context_create每個fwrite都會阻止蘋果關閉壞連接。
+0
發送每個通知後,您可以簡單地調用'fread($ socket)':如果返回'FALSE',則重新創建套接字。你也可以把你的發送放在try&catch中,然後自動重新創建套接字並重新發送通知(爲了以防萬一,可能需要重試最多次數)。 – user276648 2014-02-28 01:15:25
1
這是我做了什麼here
<?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!';
}
相關問題
- 1. 如何將iPhone推送通知發送到多個設備。
- 2. 如何將推送通知發送到多個設備(iOS)?
- 3. 如何發送推送通知到多個Android設備
- 4. 發送推送通知到iOS設備
- 5. 發送GCM推送通知到設備
- 6. 嘗試將推送通知發送到iOS設備 - 未收到推送通知
- 7. 如何通過Firebase將設備發送到設備推送通知
- 8. 發送SNS推送通知消息到多個設備
- 9. 天青發送推送通知到多個設備/廣播
- 10. 發送推送通知到多個設備點擊
- 11. 發送推送通知到多個Android設備使用asp .net
- 12. PHP代碼發送Android的推送通知到多個設備
- 13. 設置AWS SNS將推送通知發送到iOS設備
- 14. 無法通過APNS將MDM推送通知發送到設備。
- 15. Parse.com:從設備發送推送通知?
- 16. 推送通知:如何使用Pubnub向特定設備發送推送通知?
- 17. 直接從設備發送蘋果推送通知到設備
- 18. 如果設備令牌更改,如何將推送通知發送到多個設備(屬於一個用戶)?
- 19. iOS發送推送通知到一次更多的設備PHP
- 20. 發送推送通知到許多設備令牌
- 21. 如何推送通知發送到特定設備
- 22. ios推送通知多個設備
- 23. Apple推送通知給多個設備
- 24. aws多個設備的推送通知
- 25. 在多個Android設備間使用Firebase發送推送通知
- 26. 將推送通知發送到新註冊的設備
- 27. Android GCM推送通知 - 將消息發送到一組設備
- 28. 使用Parse將推送通知發送到Android設備
- 29. 如何測試SNNS將APNS推送通知發送到單個設備
- 30. 如何在一個Android設備推送通知菜單中發送並查看很多推送通知?
您可以檢查我在這裏做http://stackoverflow.com/questions/14563097/sending-multiple-iphone-push-notifications-apns-php - 教程 – 2013-05-17 05:08:46