Как я могу адаптировать цикл массива к этой функции push-уведомлений ios, которая в настоящее время принимает / отправляет токен SINGLE ios Device?

Я работаю над созданием подпрограммы push-уведомлений для приложения iOS, которое я создал и успешно запустил, и у меня есть уведомление для одиночного токена устройства, работающего нормально со следующим кодом, но вместо этого я хотел бы, чтобы уведомление отправлялось на токены устройства MULTIPLE ( Я хотел бы извлечь их из базы данных MySQL и передать этот массив на страницу PHP, которая обрабатывает процесс push-уведомлений) …

Вот код, который я сейчас использую для проверки токена одного устройства:

<?php
// Message to send
$message = 'Test Push Notification message sent at '. date('H:i');

// Put your device token here (without spaces):
$deviceToken = 'abcdefghijklmnopqrstuvwxyz1234567890';  // DADS device

////////////////////////////////////////////////////////////////////////
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $certfile);
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 'Connected to APNS' . PHP_EOL;

// Create the payload body
$body['aps'] = array(
'alert' => $message,
'badge' => 1,
'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 'Message not delivered' . PHP_EOL;
else
echo 'Message successfully delivered' . PHP_EOL;
echo $result ;

// Close the connection to the server
fclose($fp); return $response;
?>

Поскольку это один из моих первых реальных опытов работы с php (я ежедневно имею дело с AS3, javascript, некоторыми и некоторыми устаревшими версиями VBscript / classic ASP), я поэкспериментировал с зацикливанием массивов на основе PHP и смог выполнить эту очень простую процедуру. Моя цель состоит в том, чтобы добавить это в вышеупомянутый код, чтобы использовать ОДИНОЧНОЕ соединение с сервером push-уведомлений, чтобы отправить одно сообщение ВСЕМ токенам устройства:

// START WITH A COMMA SEPARATED STRING OF VALUES AND TURN IT INTO AN ARRAY...
$myArr = 'test1, test2, test3, test4, test5';
$myList = explode(", ",$myArr);// HEAVY LIFTING HANDLED HERE... A FUNCTION THAT LOOPS THROUGH ARRAY, AND SHOWS THE VALUE AND THE LENGTH OF THE VALUE
function doArrayListing($funcList){
foreach ($funcList as $value) {
print_r($value . "  " . strlen($value) ."\n");
}
}

// CALL THE FUNCTION AND PASS THE ARRAY TO IT...
doArrayListing($myList);

Итак, в двух словах, я пытаюсь использовать что-то похожее для обхода массива токенов устройства, отправки сообщения и проверки / чтения ответа после каждого ИЛИ после того, как ВСЕ сделано.

Мой план «B» — выполнить процесс, который будет просто отправлять сообщение на один токен устройства, затем ждать x секунд, прежде чем снова его вызвать, но если у меня, например, 300 токенов устройства, это может занять много времени для отправки всем пользователям … не говоря уже о том, что я не знаю, смогу ли я продлить таймаут для страницы / процесса php.

Я также заглядываю в сервис обратной связи apns, потому что из моих исследований звучит так, будто я отправляю список устройств, и один из них недействителен или больше не зарегистрирован в apns, тогда соединение обрывается и просто умирает. … поэтому я заранее запустил бы процесс, который удалит все недействительные токены устройства из моей базы данных.

Спасибо за любую помощь / руководство, которое может предоставить любой!

0

Решение

Для тех, кто может столкнуться с этим, ответ, кажется, так же просто, как изменить его, чтобы сделать несколько $ fwrites …

foreach ($myDevicesArray as $deviceToken) {

// 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 'Message not delivered' . PHP_EOL;
else
echo 'Message successfully delivered' . PHP_EOL;
echo $result ;
};

… в общем, у меня есть мой массив токенов устройств, и я перебираю этот массив, создавая двоичное уведомление, затем отправляя на сервер, затем печатая результат.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector