многократная отправка ios push-уведомлений не работает

Я получаю настроенную CMS для школы (PHP / Mysql / html / CSS / JS). Одна из функций этой CMS — отправка информации о школе в мобильные приложения. Например, учитель может добавлять новости для своих учеников, а CMS отправляет push-уведомления Android и iOS своим ученикам.

Проблема в том, что когда система отправляет несколько уведомлений iOS, уведомления не принимаются. (Отдельные iOS-уведомления работают без проблем).

Исходный код функции:

function send_notification_ios($mesaj, $uye, $link = NULL,$cert = 'combined',$passphrase="passphrase123") {
$success = 0;
$failure = 0;
$error;
$errorString;
$keyPath = dirname(__FILE__) . '/' .$cert.'.pem';

$keyPassword = $passphrase;
$context = stream_context_create();
if (!stream_context_set_option($context, 'ssl', 'local_cert', $keyPath)){
return json_encode(array('success' => 0, 'failure' => 1, 'reason'=>'stream_context local_cert'));
}
if(!stream_context_set_option($context, 'ssl', 'passphrase', $keyPassword)){
return json_encode(array('success' => 0, 'failure' => 1, 'reason'=>'stream_context passphrase'));
}

$socket = stream_socket_client('ssl://gateway.push.apple.com:2195', $error, $errorString, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $context);
if (!$socket) {
return json_encode(array('success' => 0, 'failure' => 1, 'reason'=>'soket: '.$error.' '.$errorString.' '.$keyPath.' '.$keyPassword));
}
$body['aps'] = array(
'alert' => array(
'action-loc-key'    => "Open",
'body'              => $mesaj
),
'sound' => 'default',
'badge' => 0
);
foreach ($uye as $item) {
$body['aps']['badge'] = (isset($item['badge'])) ? $item['badge'] : 0;
$body['url'] = (isset($item['url'])) ? $item['url'] : '';
$encodedData = json_encode($body);
$binaryString = chr(0).pack('n', 32).pack('H*', $item['apikey']).pack('n', strlen($encodedData)).$encodedData;
$result = fwrite($socket, $binaryString, strlen($binaryString));
if (!$result) {
$failure++;
} else {
$success++;
}
}
fclose($socket);
return json_encode(array('success' => $success, 'failure' => $failure, 'reason'=>'fwrite', 'certname'=>$cert));
}

Любая помощь будет оценена.

0

Решение

Существует два типа сертификатов для отправки push-уведомлений.

  1. Development Push Notification Certificate — работает, когда вы работаете в разработке.

  2. Сертификат push-уведомлений о распространении — производственный push-уведомление будет работать при загрузке приложения из App Store. Вы также можете протестировать производственный процесс с помощью сборки приложения AdHoc.

Простой способ проверить push-уведомления iOS

Вам необходимо добавить токен устройства и ваш сертификат с парольной фразой.

0

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

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

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