Пакетный / множественный код уведомления iOS Push – работает для 2 устройств, но не для 100

Следующий код работает нормально, если количество устройств, которые я отправляю, равно 2, то есть они оба получают push-уведомления. Но если я подниму этот предел до 100, никакие push-уведомления не будут получены.

Я прочитал об этом, и похоже, что я правильно отправляю уведомления о партиях (т. Е. Несколько запросов через одно соединение); тайм-аут подключения установлен с хорошим и высоким (60 секунд); вывод кода выглядит в порядке; ничего в журнале ошибок apache, поэтому я не вижу, где проблема.

Мой клиент действительно взломан. Может ли кто-нибудь помочь?

функция sendIosPushes () {

$payload['aps'] = array('alert' => pushMessage, 'badge' => badgeNumber, 'sound' => 'default'); $payload = json_encode($payload); //$statement = "SELECT * FROM push_ios WHERE device_token = 'device token of my iphone" OR device_token = 'device token of my ipod'; //works selecting my two devices from table $statement = "SELECT * FROM push_ios"; //doesn't work when selecting all devices from table $streamContext = stream_context_create(); stream_context_set_option($streamContext, 'ssl', 'local_cert', apnsCert); $connectTimeout = 60; $apns = stream_socket_client('ssl://' . apnsHost . ':' . apnsPort, $error, $errorString, $connectTimeout, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $streamContext); $numDevices = 0; $numRequestsSent = 0; $result = mysql_query($statement); while ($row = mysql_fetch_assoc($result)) { $numDevices++; try { $deviceToken = $row['device_token']; //$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', $deviceToken) . chr(0) . chr(strlen($payload)) . $payload; $apnsMessage = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; //from http://stackoverflow.com/questions/1642411/sending-multiple-iphone-notifications $fwriteRes = fwrite($apns, $apnsMessage, strlen($apnsMessage)); echo "Push sent to " . $deviceToken . "<br />\n"; $numRequestsSent++; } catch(Exception $e) { echo "1. Exception: " . $e->getMessage() . "<br />\n"; } } fclose($apns); if ($error != 0 || (isset($errorString) && strlen($errorString) > 0 )) { echo "ERROR: " . $error . " - ". $errorString . "<br />\n"; } return $numDevices . " iOS devices. " . $numRequestsSent . " requests sent."; 

}

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

В случае недействительного токена устройства Apple вернет ответ об ошибке, если вы используете более новый двоичный формат (в котором вы отправляете идентификатор сообщения и срок действия сообщения), чего вы не делаете. В вашем случае недопустимый токен просто закроет сокет, но вы не сможете узнать, какое сообщение вызвало проблему.

Здесь вы должны прочитать об ошибке. Вы должны прочитать о формате здесь .

  • Автоматическое тестирование уведомлений с помощью XCTest
  • libgdx: Parse.com iOS SDK и RoboVM
  • iOS: Push-уведомления, UIApplicationStateInactive и быстрое переключение приложений
  • Push-уведомление с использованием Urban AirShip и Rails 3 для iphone
  • Уведомление о pushgmail не отображается в строке состояния или в окне блокировки для iOS с помощью плагина PushPlugin
  • Функция Azure: отправка уведомлений определенным пользователям
  • нужно ли регистрировать токен устройства, загружающий мое приложение?
  • Запланированные уведомления с помощью AWS SNS
  • Как сделать мою версию приложения для отладки получать уведомления о выпуске продукции на iOS?
  • iOS: используйте уведомление VOiP вместо «нормального» уведомления
  • Возможно ли проверить тестовое уведомление без идентификатора разработчика?
  • Interesting Posts
    Давайте будем гением компьютера.