我正在使用PHP连接到apn
来向多个设备发送一些通知,尽管这个问题更多的是概念性的,所以它不必特定于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个生产用户发送垃圾邮件。其他人也有类似的问题吗?
谢谢
发布于 2013-07-05 17:48:51
我知道你想要什么,更确切地说,我确实遇到了同样的问题,对我起作用的是逆向工程。我只是查看了这个库,并检查了验证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()
}
苹果deviceToken是64个字符,所以你需要在它上面迭代64次。
https://stackoverflow.com/questions/2583957
复制相似问题