Подтвердить что ты не робот

Уведомление Apple Push: отправка больших объемов сообщений

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

Я буду отправлять примерно 7000 устройств (и растет) одновременно. Мой процесс запускается ONCE в день и транслируется на все устройства, поэтому я не постоянно повторно открываю соединение.

В настоящее время я могу легко отправить на 2 устройства одновременно, и сообщения будут успешно доставлены. Однако, когда я пытаюсь отправить все 7000 устройств, сообщения, похоже, не доставляются.

Псевдо-логика для моего кода:

open connection to apple
loop over device-tokens
    write to socket connection per device
end loop
close connection to apple.

Я где-то видел, что я должен выполнять только одну запись и строить одно огромное тело, другими словами, псевдокод будет выглядеть так:

loop over device tokens
    create payload aggregating all devices
end loop
open connection to apple
write to socket ONCE with whole payload for 7000 devices
close connection

Трудно проверить, поскольку я, очевидно, не могу спамить своих пользователей 7000 с тестовыми сообщениями. У кого-то еще была аналогичная проблема?

Спасибо

4b9b3361

Ответ 1

Я читал, что яблоко действительно заботится о количестве соединений, которые вы делаете на своих серверах, но я никогда не слышал о каких-либо ограничениях на запись. Кроме того, я не уверен, какой ответ вы получите здесь, но, возможно, стоит попробовать посмотреть, что произойдет. Возможно, экспериментируйте с сервером уведомлений на песочнице, используя только токены устройства. Эти телефоны не должны получать push-уведомления, отправленные на сервер песочницы, и если песочница сообщает "доставлен успешно", это будет беспроблемный способ тестирования.

Ответ 2

Я вижу то, что вы хотите, и, скорее, я столкнулся с той же проблемой, что и работало для меня, - это обратная инженерия. Я просто просмотрел библиотеку и проверил функцию, которая проверяет устройствоToken. Поэтому, создав токен фиктивного устройства, я просто убедился, что сгенерированный токен действителен в соответствии с библиотекой.

Следующий код позволит вам генерировать токены устройств действительный, теперь на нем будет показано, сколько миллионов токенов генерирует с помощью этой функции.

   def generateRandomDeviceTokenAndAppendItToJson(tokenLength: Int) {
     val randomlyGeneratedDeviceToken = new StringBuilder()
      randomlyGeneratedDeviceToken.append("          \"")
        (1 to tokenLength) foreach {
         times: Int =>
        if (tokenLength equals Device.Apple)
         randomlyGeneratedDeviceToken.append(validCharacter().toString.charAt(0))
        else
         randomlyGeneratedDeviceToken.append(Random.alphanumeric.head)
        }
       randomlyGeneratedDeviceToken.append("\",")
       println(randomlyGeneratedDeviceToken)
       writer.write(randomlyGeneratedDeviceToken.toString())
      }

      private def validCharacter(): Int = {
       val a = Random.alphanumeric.head
       if ('0' <= a && a <= '9')
        return (a - '0')
       else if ('a' <= a && a <= 'f')
        return ((a - 'a') + 10)
       else if ('A' <= a && a <= 'F')
        return ((a - 'A') + 10)
       validCharacter() 
     }

Яблоко deviceToken имеет 64 символа, поэтому вам нужно будет перебирать его 64 раза.