Apple Push Notification: envio de grandes volumes de mensagens

Estou usando o PHP para conectar-me a apn s para enviar algumas notifications para vários dispositivos, embora a questão seja mais conceitual, portanto, não precisa ser específico para o PHP.

Vou enviar para cerca de 7000 dispositivos (e crescer) todos ao mesmo tempo. Meu processo é executado uma vez por dia e transmite para todos os dispositivos, então não estou constantemente reabriendo uma conexão.

Atualmente, posso enviar facilmente para 2 dispositivos por vez e as mensagens serão enviadas com sucesso. No entanto, quando eu tentar enviar para os 7000 dispositivos completos, as mensagens não parecem entregar.

A pseudo-lógica do meu código é:

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

Eu vi em algum lugar que eu deveria apenas executar um SINGLE escrever, e construir um corpo enorme, em outras palavras, o pseudo-código seria:

 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 

É difícil de testar, pois, obviamente, não posso enviar spam aos meus 7000 usuários de produção com mensagens de teste. Alguém já teve um problema semelhante?

obrigado

Eu li que a Apple se preocupa com o número de conexões que você faz aos seus servidores, mas nunca ouvi falar sobre limites de escrita. Além disso, não tenho certeza sobre o tipo de resposta que você receberia aqui, mas pode valer a pena tentar ver o que acontece. Talvez experimente com o servidor de notificação push sandbox, usando apenas os tokens do dispositivo dos dispositivos de produção. Esses telefones não devem receber nenhuma notificação push enviada para o servidor sandbox e se o sandbox relatar “entregue com sucesso”, isso seria uma maneira livre de preocupações para testar.

Eu vejo o que você quer e, sim, eu enfrentei o mesmo problema, o que funcionou para mim foi a engenharia reversa. Eu simplesmente olhei para a biblioteca e verifiquei a function que valida o dispositivo. Então, enquanto criava um token de dispositivo fofo, fiquei seguro de que o token gerado é válido conforme a biblioteca.

O código a seguir permitirá que você gere Tokens de dispositivo válidos , agora está em você a quantos milhões de tokens gerar usando esta function.

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

O dispositivo AppleToken é de 64 caracteres, então você precisará iterar sobre ele por 64 vezes.

    Intereting Posts