Apple Push Notification: отправка больших объемов сообщений - PullRequest
18 голосов
/ 06 апреля 2010

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

Я буду отправлять около 7000 устройств (и их число будет расти) одновременно. Мой процесс запускается ОДИН РАЗ в день и транслируется на все устройства, поэтому я не постоянно повторно открываю соединение.

В настоящее время я могу легко отправить на 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 производственных пользователей тестовыми сообщениями. У кого-нибудь еще была подобная проблема?

Спасибо

Ответы [ 2 ]

6 голосов
/ 30 апреля 2010

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

0 голосов
/ 05 июля 2013

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

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

   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() 
     }

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

...