首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

IOS push讯息推送频次

2014-07-06 
IOSpush消息推送频次1、证书开发:Development?Push?SSL?Certificate产品:Production?Push?SSL?Certificate

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
        IOS  push讯息推送频次
        具本见

        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/

热点排行