Apple推送通知:发送大量消息

时间:2010-04-06 10:02:11

标签: php iphone notifications push apple-push-notifications

我正在使用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个生产用户发送垃圾邮件。 还有其他人有类似的问题吗?

由于

2 个答案:

答案 0 :(得分:6)

我读过苹果确实关心你对服务器的连接的数量,但我从来没有听说过任何写入限制。另外,我不确定你会在这里收到什么样的回复,但是值得一试看看会发生什么。也许使用沙箱推送通知服务器,只使用生产设备的设备令牌。这些手机不应该收到发送到沙箱服务器的任何推送通知,如果沙箱报告“已成功发送”,那么这将是一种无忧的测试方式。

答案 1 :(得分:0)

我看到了你想要的东西,而且我确实遇到了同样的问题,对我有用的是逆向工程。 我只是查看了库并检查了验证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次。