IOS push消息推送频次

  • 1、证书

开发:Development Push SSL Certificate
产品:Production Push SSL Certificate

程序开发期间用开发证书,提交AppStore后切换为产品证书。

java服务端推荐使用 javapns http://code.google.com/p/javapns/

用命令将cer转换为p12。

参考:http://www.cocoachina.com/iphonedev/sdk/2011/1124/3599.html

  • 2、发送

APNs会将链接太频繁的链接视为DDos攻击,所以链接频率不要太高。
目前每5分钟连接接一次。
因为使用了加密链接,会被GFW随机阻断(看脸)···看有的说建议用国外VPS。
单个ip连接每次发送消息数量不要超过1000条,高了容易失败和受错误token影响的用户太多。
我使用了mina昨晚主服务,2台服务器做发送服务器,主服务器生成消息列表,在平均分配到2台发送服务器上发送。每个服务器不超过1000条。
以后用户多了增加发送端就ok。当然还需要做心跳之类的服务监控。

  • 3、Token和消息

token是系统+硬件关联,也就是你每次恢复出厂设置刷新版本系统和新iPhone/iPad激活过程,就是去苹果服务器请求一个新的token回来。
越狱用户没有激活过程,所有苹果不会有这个手机的token。越狱手机是收不到消息的,除非打了push补丁。
打了补丁的是伪造一个token,会有消息发串的情况(论坛看越狱用户说过,未证实)。

token和消息一对一,无论你给一个用户发多条内容还是一条内容。

当用户关闭了消息通知或者授权后又在设置了取消的对应用的授权,那么这个token是错误的token。

错误的token苹果不会通知应用·····所以只能靠自己查。

错误的token会导致的问题:

有一个消息队列:[message1,message2,message3,message4,message5]

当message3这个消息的token变成无效token后

你发送这个队列,你不会收到任何错误报告,但是,这个队列的message4,message5已经是不可达的了。

因为message3是个错误token,APNs不会继续发送剩下的内容···

所以,需要在每次发送前或后,调用APNs提供的feedback服务,取得错误的token,然后在自己的业务里处。
下次发送时,消息队列里就不能够有发送用户token是错误的消息了。

 

4、服务器返馈
当用户将我们的应用删除时,我们应该停止对这台机器推送,这个SSL地址是:
正式机:feedback.push.apple.com, port 2196
测试机:feedback.sandbox.push.apple.com, port 2196

具本见

https://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html

php如下:
[cc lang='php' ]
$certFile = ‘apns-dev.pem’;
while(true){
$ctx = stream_context_create();
stream_context_set_option($ctx, ‘ssl’, ‘local_cert’, $certFile);
//stream_context_set_option($ctx, ‘ssl’, ‘passphrase’, $this->certPass);
echo “try to open stream\n”;
$fp = stream_socket_client(‘ssl://feedback.sandbox.push.apple.com:2196′, $err, $errstr, 5, STREAM_CLIENT_CONNECT, $ctx);
if (!$fp) {
print “Failed to connect”. $err . $errstr. “\n”;
exit();
}
else
{
echo ‘Connected to feedback sandbox…’;
while(($in = fread($fp, 1024)) != EOF)
{
echo ‘read ‘. $in . “\n”;
}
socket_close($fp);
fclose($fp);
}
sleep(2000);
}
[/cc]
注意,要将你的APP删除后,再发一个推送,才可能返回数据

 

(from:

 

http://hi.baidu.com/smallqiang/item/334f54e287cb5cd1eb34c95e

http://jcoder.org/apple/197/

你可能感兴趣的:(push)