iPhone的Push(推送通知)功能原理浅析

这篇文章写于很久以前,内容已经过期了。看到还是陆续有人在下方留言提问,特此说明下。

QQ发布了3.3.0,主要增加了对iPhone Push功能的支持。但是,由于blacksn0w解锁软件的缺陷,用其解锁激活的iPhone无不出现了Push的缺陷。鉴于国内许多人对iPhone的Push功能的误解,并导致很多匪夷所思的言论,晓晓决定写一篇文章,对iPhone的Push功能,进行一次科普,顺便为各位分析下目前存在的几种补丁的原理。

敬告小白:本文理论内容来自iPhone官方参考文件,涉及破解的内容来自dev team和ih8sn0w。如果你认为你对iPhone的理解比Apple还要正确,请直接向Apple指出文档中的错误之处。本人无责任翻译概括。

注意:blackra1n越狱本身并不会导致不能Push的缺陷,导致缺陷的是用于解锁的blacksn0w。如果你想争论,请先阅读完本篇文章,再自己好好想想。

第一部分:Push原理

(以下绝大多数内容参考自、图片来自iPhone OS Reference Library)

机制简介

Push的工作机制可以简单的概括为下图

图中,

  • Provider是指某个iPhone软件的Push服务器。
  • APNS是Apple Push Notification Service(Apple Push服务器)的缩写,下文统一使用该缩写。

因此,整个过程可以分为三个阶段,下面用大家常用的聊天客户端BeejiveIM来说明。(BeejiveIM是一款支持多账户登录的支持Push的iPhone聊天客户端,支持MSN、Google Talk等)

此时Provider为BeejiveIM服务器,我们在BeejiveIM上登陆MSN,其实软件是先把登录信息发送到BeejiveIM服务器,再通过其服务器来登陆MSN。因此,当我关闭了BeejiveIM,BeejiveIM服务器会继续为我登陆MSN,此时如果有人对我的MSN账户发送了消息,那么就会触发Push。此时:

  • 第一阶段:BeejiveIM服务器把要发送的消息、目的iPhone的标识打包,发给APNS。
  • 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。
  • 第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。

Push认证

许多朋友说Push不能用。其中一大部分,就是在认证阶段就出了问题。想了解原因?请细看:

这里所说的认证机制,实际上包含两层。一层是物理连接上的认证,另一层则才是涉及到iPhone设备令牌的认证。

物理连接上的认证:SSL/TLS链接

(如果你了解TLS,那么这里我几乎无需介绍。)

iPhone在开启Push的时候,会连接APNS建立一条TLS加密链接。每一台正常的iPhone都有一个独有的设备证书,而APNS也有一个服务器证书。两者建立的时候,会验证彼此的证书有效性。

TLS链接一旦建立,在没有数据的情况下,只需要每隔15分钟进行一次保活的握手,因此几乎不占流量。而一旦因为意外原因导致链接中断,iPhone会不断重新尝试建立TLS链接,直到成功。

更高一层次:基于token(令牌)的认证

在机制简介里,我提到过APNS判断Push推送消息该发给哪台iPhone的依据是一个“目的iPhone的标识”,这个标识就是device token(设备令牌)

设备令牌是怎么生成的呢?是每次建立TLS连接时,APNS通过前一层次(TLS层)里我们提到的每台正常的iPhone唯一的设备证书(unique device certificate),并用令牌密钥(token key)加密生成的。

在令牌生成了之后,APNS会把设备令牌(device token)返回给iPhone,而对应的Push应用程序(如BeejiveIM),则把返回来的设备令牌(device token)直接发送给Provider(如BeejiveIM服务器)。这样,当Provider有Push消息要发送时,就会把对应帐号的设备令牌(device token)和消息一起发送给APNS,而APNS再依据设备令牌(device token),找到相应TLS链接的iPhone,并发送相应的Push消息

以上复杂的流程可以归纳为下面这幅图:

图中,Client App是iPhone上的Push应用程序。(图中缺了一条(当有Push消息时)由Provider到APNS的链接)

最重要的部分——每台iPhone独有的设备证书和密钥的来历

正常的iPhone刷系统之后,是没有设备证书和密钥的。这就是为什么iPhone会需要连接到iTunes上进行激活——激活过程中,Apple会分配给每台iPhone独一无二的设备证书(device certificate)和密钥(key)

以上我仅仅介绍了从iPhone到APNS的链接建立。其实从Provider到APNS也有一条TLS链接,但是与本文关系不大,所以不多加介绍了。

我的PUSH问题出在哪里?

相信许多同学都抱有这样的疑问。

正如上文提到的,iPhone的Push需要APNS生成对应iPhone的设备令牌,但生成这个令牌又需要iPhone上的有效的设备证书(device certificate)和密钥(key),但是:

iPhone OS 3.X 使用blacksn0w进行解锁的过程,是不经过iTunes的,而blacksn0w本身又不生成对应的设备证书(device certificate)和密钥(key),因此这样解锁完的iPhone根本不可能与APNS建立任何的TLS链接,Push自然废了。

有关各种pushfix补丁

要修补这个问题,唯一的办法就是重新生成唯一且有效的设备证书(device certificate)和密钥(key)

但是要知道,证书是需要机构签发的,自己一个人随便弄的一个证书,只会被APNS认为是无效证书。(SSL证书一个多少钱大家可以去查查)

并且对应的文件似乎还和iPhone本机的一些内容相关,不是直接制作好的文件放进去就可以的。

于是,最早,dev team推出了一个测试版补丁,Push fix by dev team(通过他们的twitter发布的,因此官网没有消息)。这个补丁初期很有效。但是仅在iPhone 2G上比较正常。

之后某人士发布pushfix 1.0了。由于使用了不同的生成方法,因此在新版本iPhone上也正常工作了。于是风靡一时。

然而,以上两个补丁都有严重的隐患——他们使用了一个固定的证书作为设备证书(device certificate)。因此在不同iPhone上的区别仅仅在于生成的密钥(key)不同。(待确认)

上面提到过,APNS依靠每台iPhone独一无二的设备证书(device certificate)和密钥(key)来生成独一无二的设备令牌(device token),用来标识每台iPhone。

但当多个iPhone的设备证书(device certificate)完全一致时,就存在一定几率使得多个iPhone获得相同的设备令牌(device token)

而随着这两个补丁的使用人数不断增加,使得出现获得相同设备令牌(device token)的iPhone数量大大增加了。

当这些相同设备令牌(device token)的iPhone上启用了同一个应用程序的Push的时候,就极有可能出现彼此间的Push串发的现象。——如某论坛目前N多人抱怨QQ的Push到别人iPhone上的情况就是如此。

之后,Pushfix的作者,声称自己可以为每台iPhone手工制作唯一的设备证书(device certificate)和密钥(key),并且开始提供了付费服务,并且最终推出了付费的Pushfix 2.0——其通过cydia安装的原理是,在安装的时候在线连接到pushfix站点检查对应iPhone的imei确定是否付费再自动下载对应的证书。

虽然不知道他是怎么制作这些证书的。但是经过晓晓的验证,他制作的证书确实是有效的。Push问题确实修复了。

在这之后,某论坛上出现了一个叫做Pushfix_D的补丁,声称无需付费也能直接修复问题。然而,

——考虑到一些情况,我决定把对Pushfix_D的判断用英文发出来。当然,制作者肯定很清楚下面写的东西:)

it contains the same released push keys from back in July 2009.  Everybody gets the same key, so it is going to have all the same problems of ALL the free push fixes.  Push isn't going to work very long and it is going to drain your battery.

其他出错的情况

我的iPhone在cmwap下无法push?!

对的,这完全正常。在wap网内,TLS链接几乎无法建立成功。

我的iPhone在Wi-Fi下无法push?!

实际上这得说是iPhone与某些无线路由器的不兼容。如果无线路由器开启了DNS转发功能,那么很有可能你的iPhone无法成功与APNS服务器建立TLS链接。

解决方法:

关闭无线路由器的DNS转发功能,手动为iPhone的Wi-Fi连接设置DNS为8.8.8.8

补充,实际上,这也就是为什么iPhone连接到Wi-Fi上而又不能收到Push的时候,会变得发热且非常耗电。因为iPhone会不断尝试建立TLS链接

如何得知我的Push是否破解成功?

一个简单的方法就是安装 Twitbird Pro版本。在其Accounts页面,会显示当前软件的Push注册状况。

或者你可以用WinSCP之类的软件查看iPhone上的

/var/mobile/Library/Preferences/com.apple.apsd.plist

文件状态。

  • 如果其大小为119字节,则说明该iPhone已经成功取得了设备令牌(device token),并保存在该文件中。
  • 如果小于该大小,则说明该iPhone已经和APNS链接过,但是未能取得设备令牌(device token)。
  • 如果没有该文件,那说明该iPhone根本没能成功连接到APNS。

其他一些值得注意的问题

  • iPod Touch与iPhone的Push机制不完全相同,锁屏后15分钟方检查一次。故请勿与上文对号入座。
  • APNS在发送Push消息时,如果发现对应的iPhone链接中断,则会延后几分钟再发送。超过一个时间后,Push消息会被删除。因此请注意你的网络状况是否影响Push正常工作。
  • 如上文所说,每台iPhone的设备令牌(device token)储存在/var/mobile/Library/Preferences/com.apple.apsd.plist 文件中。这就是为什么每次需要重装Push补丁时,建议删除push程序并删除该文件。
  • 使用sbsettings的EDGE开关关闭EDGE,却不关闭Push的话,会导致iPhone不断尝试建立TLS连接,最终耗尽电量。因此,如果你不打算或不能用Push,请关闭Push选项。
  • 对软件的Push服务器(Provider)而言,Wi-Fi与手机网络是一样的,在Push处理上不会有任何区别。
  • 虽然已经解释的很清楚,但还是明说一句,只要TLS连接正常,Push服务就是实时的,速度仅取决于Provider而已。
  • 题外话,iPhone上的邮件推送为Push Mail技术,与本文所说的Push完全不同。请查阅Exchange Direct Push相关内容。

福利

一句话,如果你觉得Push没什么用,那只能说明你见识太少。在以下页面可以查看一些支持Push的优秀软件。

http://appadvice.com/applists/show/definitive-list-of-push-capable-apps

内容参考:iPhone OS Reference Library

Sid 晓 2 years ago
  1. beak

    看了你的文章,受益匪浅
    但是还是有几个问题:按照你说的话,那是不是有锁版的机器除了签订合同是不是就没有别的办法能正常使用push了?无锁版的如果是刷的自定义固件,是不是也是等于废了PUSH?那是否可以通过在刷自定义固件之后恢复在刷之前itunes激活之后备份的com.apple.apsd.plist文件来恢复PUSH功能呢?
    烦请指教,谢谢!

    2 years ago
    • 晓晓

      那是不是有锁版的机器除了签订合同是不是就没有别的办法能正常使用push了?

      不是这样的。有锁版的iPhone可以先用对应的SIM卡激活。或者如文中所说,打补丁。

      关于无锁版刷自定义固件的问题。不好意思,我没用过无锁版本,所以不是很清楚。但是自定义固件本身也是内置blackra1n,仅在有锁版本下执行的吧?嘛,具体不清楚

      备份com.apple.apsd.plist是不够的。因为建立TLS链接需要设备证书(device)和密钥(key),而这两者还与keychain文件内的某些内容保持一致。这里的一致性问题我没有考察过。但是如果完整备份这些文件,或许是可行的。

      2 years ago
      • beak

        谢谢!受教了!

        2 years ago
        • 晓晓

          啊啦,客气客气哈~

          2 years ago
          • beak

            关于某论坛的Pushfix_D补丁你有些话没有说
            请问能私聊不?

            2 years ago
            • 晓晓

              并非不方便说。只是写作该文的时候,关于那个补丁的信息还没确认。

              这几个补丁的具体实现细节,我个人没有太深入。所以很多结论现在说还为时过早。等确认了,我会把结论写上来的。

              2 years ago
              • beak

                了解~~~

                2 years ago
              • Dylean

                补充:
                所有的Pushfix,他的根本都是一样的。
                使用的都是DevTeam的Pushfix工具:
                使用Nimble获取Certificate
                使用Inject写入Certificate

                另外,Lz知道第二次加密是几位加密么?知道这么在这样加密的情况下重复的概率是多少么?
                PushFix 1.0已经完全无法使用

                现在想顺利push只有3个办法:
                1:购买无锁版的iPhone
                2:使用原运营商的Sim激活
                3:购买使用PushFix2.0 (每个生成Certificate都是唯一的)

                如果除去上面三种方法,唯一能做的也就是使用同样的Certificate,加密产生不同的令牌。

                PushFix_D做的仅仅是让以前的Pushfix补丁重新可以工作,仅此而已。That's all。

                另外我想说,不断的生成唯一的Certificate并不难,而且技术是公开的。
                但是这些pushfix都是作者无偿提供给大家使用的,本身就是义务的。

                收费的pushfix2.0作者收的也是幸苦费而已。

                2 years ago
                • 晓晓

                  啊拉拉,非常感谢你的补充!

                  由于我对加密技术本身不是特别了解,所以之前得出准确的判断都比较困难呢~还是你的描述一语中的~

                  不过你开头的话稍微有点偏离啦——

                  pushfix的作者在pushfix 1.0出来之后,就开始提供手工制作的唯一的证书(certificate)
                  而后来的pushfix 2.0,虽然是deb安装,但也是从pushfix.info服务器上,下载对应imei码的证书

                  ——因此他只用了inject写入。

                  当然,写作这篇文章的目的,并非指责Pushfix以及Pushfix_D。它确实可以凑合用。

                  但这种方法确确实实存在的缺憾,不写出来的话,大概对不住某论坛里那群收到QQ串消息的人吧。

                  顺便,腾讯还得为串消息的情况背个黑锅,蛮可怜的。

                  嘛,还是很感谢你的长篇解释哈!

                  2 years ago
  2. lovee

    SSL证书贵的一塌糊涂,偶本来想弄一个的,结果一个两万多日元,而且还每年都得付款- -b

    2 years ago
    • 晓晓

      反正loveeee有的是米……一年两万小意思啦……=v=

      2 years ago
      • lovee

        晓晓口胡不打草稿

        2 years ago
        • 晓晓

          打了草稿的呀~~你看你看嘛~~~

          说回来SSL证书还真是贵呢……以后找CNNIC签好了——(笑

          2 years ago
          • lovee

            没看到晓晓的草稿打在哪儿的=w=

            2 years ago
  3. gugu

    你好,为什么我用sim卡激活后再越狱解锁的还是无法使用push,有锁版3G

    2 years ago
    • 晓晓

      描述太粗略了……

      请自行检查一下/var/mobile/Library/Preferences/com.apple.apsd.plist 文件状态……

      用DFU模式重新刷官方固件再来会比较靠谱。而且最好保证你的iPhone网络连接是畅通的——至少要能够让iPhone连接到APNS。

      2 years ago
  4. gugu

    我本来push是有时收到有时收不到,所以我把com.apple.apsd.plist 119字节给删除了,然后DFU刷机,自带卡激活后越狱解锁,可是现在怎么也下不到这个文件了...

    2 years ago
    • 晓晓

      囧。你的网络环境有问题。大概连接不到APNS。换个SIM卡重新来,然后安装一个Push的程序,分别看看在手机网络下和Wi-Fi下能否连接到APNS了。

      最好在获得了设备令牌(device token)之后,再解锁。

      2 years ago
  5. gugu

    能否把你的那个文件发给我试试

    2 years ago
    • 晓晓

      不行的。那个文件是根据你的机器证书和密钥生成的。

      2 years ago
  6. coolxll

    好文章,收藏了

    2 years ago
  7. yegle

    精彩!

    2 years ago
  8. Harrydotter

    港版3GS,使用移动神州行SIM卡。
    如果一开始使用wifi接入网络,并且登陆QQ,然后关闭QQ,QQ能够正常执行push信息。并且在此前提下即便是关闭了wifi,QQ也能成功push。
    如果一开始就没用wifi接入,手机重启或者开飞行过后,直接用cmnet让QQ登陆,关闭QQ后完全无法接收到push的信息。
    为了针对此问题进行验证,我甚至尝试了重新恢复iPhone到官方固件,未越狱前提下,仅仅安装QQ,仍然如此,就是说第一次必须在wifi环境下登陆QQ,之后才能收到push,并且离开wifi环境后gprs仅能保持较短时间push正常工作。稍长时间后也失效。
    之后我又对ebuddy pro进行了测试,居然和QQ一样的结果。

    把威锋上所有关于QQ push的帖子都翻了一遍,和我一样情况的人也有几个。最后更离谱的是某兄换了联通卡就全ok了。难道……移动的问题?我宁肯相信这是因为节假日的原因……关闭什么为了缓解压力?

    2 years ago
    • 晓晓

      确实.你猜得没错.

      移动似乎关闭了Push用的5XXX端口(具体忘了,待查).3天后我会把具体的信息补充到文章中(使用netstat命令查看Push链接建立状态)

      不过,终归这是移动的问题.
      还是归顺联通吧...呵呵

      2 years ago
      • Harrydotter

        但愿这只是一时而不是一世。另,netstat命令在iPhone上运行?命令行模式怎么调出?

        2 years ago
      • Harrydotter

        安装mobileterminal,但是没法执行netstat……哈

        2 years ago
        • 晓晓

          没记错的话,在cydia中搜索inetutil

          2 years ago
          • Harrydotter

            找到了,network-cmds inetutils 都要装。
            再弱弱问下。netstat的话。那条信息能够详示push此时的链接建立状态?

            2 years ago
            • 晓晓

              嗯,用其查看5223端口的链接状态

              2 years ago
              • Harrydotter

                比较悲剧的是无论用wifi还是中移动的EDGE我都没看到有5223端口的连接状态信息,都是4xxx的端口。期间通过wifi连接push是正常的。so,实在还是担心不仅仅端口问题。中移动是不是屏蔽了和apple的apn服务器握手信息。

                罢了,先关掉通知,年后再说了。近期不指望正常,而且怕就怕自动飞行结束,通知开着,没wifi,电量就那么给消耗了。3gs本来那电池就不太待见。

                2 years ago
  9. 二进制的猫

    你好,我是大陆一位1代用户。我也出现了EDGE无法独立建立到服务器5223的连接的情况。
    真是头疼啊。。。
    你有什么解决办法没有啊?
    [email protected]谢谢了~

    2 years ago
    • 晓晓

      如果是端口的原因,那只能找移动处理.

      这个我真没办法...

      还是换WCDMA好了...

      2 years ago
  10. Harrydotter

    另外一种担心,针对5223端口使用的软件有很多googletalk等等都使用5223端口。其他移动网络的Gphone似乎没动静。那么我就开始担心移动是不是对17.149.36.118下手了……

    2 years ago
    • 晓晓

      呵呵,那就麻烦你ping下试试咯,我是WCDMA用户,所以没办法弄呢.

      2 years ago
      • 二进制的猫

        别人的push服务器ping怎么可能ping的通呢。。。

        2 years ago
  11. 二进制的猫

    我又做了某实验,可能不是移动做的手脚。。。可能是苹果。。。

    2 years ago
    • 晓晓

      不介意的话,可否详细说说?

      2 years ago
      • 二进制的猫

        是这样的,我分别用edge和wifi去扫描一个push服务器的5223端口,发现都是能扫出来的。。说明5223是经由edge可达的。。
        就有这种可能,edge的源ip地址发起连接被push服务器拒绝了。。。

        2 years ago
        • 晓晓

          不是很严密的推论呃.中途有可能被RST的

          2 years ago
          • 二进制的猫

            不是太懂你说的RST,是RST包吗?
            我的意思是可能是push服务器做的应用层的拒绝。
            能扫出来至少说从第三层上是可达的,这个没问题吧?

            2 years ago
  12. Raz

    读你的文章非常受教,我真的很想用PUSH但是我现在的情况和IPHONE要求我只能破解加解锁(因为服务商不提供)

    所以我想知道,PUSHFIX2.0是一个一直都会有效的方式么?

    另外,如果我重刷了以后再装PUSHFIX,我购买的KEY还会有用么?

    谢谢!!

    2 years ago
    • 晓晓

      可以的.保存好你的证书就好了哈.

      或者你可以弄张对应的运营商SIM卡就好啦.

      2 years ago
      • Raz

        我不知道怎么看运营商... 如果我买了应该如何保存证书呢?

        2 years ago
        • 晓晓

          查看你的iPhone你的序列号就能知道运营商啦.
          备份的话,就是保存好购买时发给你的压缩包啦

          2 years ago
          • Raz

            谢谢!! 如果我刷机以后再用CYDIA下载PUSHFIX2.0应该也能奏效吧,IMEI是保存在服务器上的么?

            2 years ago
            • 晓晓

              IMEI确实是保存在服务器上的啦.不用担心的.

              2 years ago
              • Raz

                高手! 相当感谢,试好了我再来给你留言~

                2 years ago
  13. Raz

    我刚刚在看PUSHFIX 2.0的说明,上面说如果软件弹出“connect to itunes to use push notifications",那就是某些程序对push system造成了损坏,必须找出问题的根源,如果有必要,必须重刷,在没有这个消息的情况下才能安装PUSHFIX 2.0

    我有这个消息...囧。。。

    2 years ago
    • 晓晓

      于是……重刷吧……

      God bless u……

      2 years ago
      • Raz

        我不想重刷啊~~~~~~~

        睡一觉起来再说。。。

        2 years ago
        • Raz

          成功,只要在notification-> on的时候不显示那个message就OK了

          2 years ago
  14. 风的朋友

    QQ 会发生Push错的问题,其他软件应该也会吧,好像没有听说过?

    2 years ago
    • 晓晓

      QQ用的人多……其他软件只是用的人少而已……概率咯

      2 years ago
  15. rez0041

    那难道我是那个幸运的人,不可能啊?我现在的push唯一发现的有两个,一个是邮件,当然像你所说,用的是GMAIL,这个可能是原本就有的,还有一个是APP商店,有新的软件升级就会在右上角提醒我,我的PUSH是关闭状态的,游戏的PUSH我就没收,其实我觉得PUSH也就是让用户更及时的知道最新动态吧,其实就是类似RSS了。

    2 years ago
    • 晓晓

      邮件不是使用push技术,麻烦看下文章末尾的说明。App商店更不是,而是大概1小时自动联网检查一次的。

      至于push的用法,每个人都不一样咯

      2 years ago
  16. seenxu

    想问一下如果购买的是iphone 3gs无锁港版,是不是也会有无法正常使用push的可能?

    2 years ago
    • 晓晓

      有啊。网络原因啊,激活原因啊什么的。毕竟这么大的过程,有很多地方是Apple和我们不能控制的嘛。

      2 years ago
      • seenxu

        多谢回复。
        我这里的情况基本可以排除网络原因,另外,无锁版机器也需要激活才能使用吗?因为我现在用的机器是托朋友从国内买的,具体他当时怎么激活的我也不太清楚。

        2 years ago
        • 晓晓

          嘛,我自己没用过无锁的版本……不能肯定的答复你。但是应该也是要激活的……你可以自己重新刷一下系统重新激活下试试……

          2 years ago
          • seenxu

            如果我重新刷系统的话(现在是用黑雨越狱的),我之前购买的软件和游戏是否在刷机以后可以正常恢复?

            2 years ago
            • 晓晓

              购买的东西是和你的itunes store帐号绑定的,和iPhone没有关系的。

              2 years ago
  17. zix

    你好。我是港版3gs.以前推送不知道为什么忽然失灵了。我就装了那个推送补丁。结果发现还是用不了
    后来我就恢复固件重新刷机了。奇怪的是后来我没装推送补丁了。但是qq的推送居然会和别人串。这是为什么?难道恢复固件删不掉那个补丁吗?

    2 years ago
    • 晓晓

      你使用了itunes的“从备份恢复”的功能吧。那个功能会备份恢复你之前的证书啥的……

      2 years ago
      • zix

        这……那该怎么办啊…我不恢复备份资料不是都丢了
        还原网络设置有用么?

        2 years ago
      • zix

        你说的确实很有道理……
        前天我看了你的文章,把/var/mobile/Library/Preferences/com.apple.apsd.plist 这个文件干脆删除了。然后我还原网路设置,这个文件又出来了
        是重新生成了还是我无意间自动从备份恢复我就不知道了…

        现在我不知道会不会和别人串。但是偶尔推送还是失灵
        我刚才在家实验。wcdma的环境下。我重新申请了个qq号发消息。第一条总是收不到,再发一条大部分时候都能收到推送。这是qq显示2.然后再发推送都正常。
        这时我打开qq,再关闭。重复以上过程。还是第一条收不到……这是什么原因……

        2 years ago
  18. HarryDotter

    今天更新了QQ3.3.1,突然想起来push这件事儿。再次在cmnet单独接入的环境下尝试了一下,很正常。看来移动年后重新开放5223的端口映射了。

    2 years ago
  19. Tetsu

    感谢站长那么细致的解释了整个push功能工作流程

    最近出来个push doctor,应该也是生成令牌的方式,不过,安装很麻烦,我今儿早上起折腾到下午搞不定。

    买了个Push fix 2.0也是搞了半天才发现,这push貌似一定会去走手机网络优先,貌似我的wifi很难连上push server

    所以我就收不到push信息,我当时想md,这6刀白花了啊

    后来把3G关了,Edge连上了。。。push功能也就正常使用了

    再操狗熊的联通,3G信号弱得跟粑粑一样

    2 years ago
    • 晓晓

      关于wifi下连接不上push的情况,你有看文章末尾的内容么?

      2 years ago
      • Tetsu

        我看了。。。我手动添加了8.8.8.8了

        但是,还是无法通过wifi push的,在pushfix里面提供的测试软件中,我可以看见这条

        STATUS: Connected over cell...而不是wifi

        下一条则是: Push is Blocked over WIFI?

        2 years ago
        • 晓晓

          看来是你的wifi问题嘛。。。不过如果搞不定的话,我也没有别的什么方案了呃。push doctor我没用过,不过看介绍,似乎已经实现了unique的证书,应该也没有任何问题了才对的⋯⋯

          2 years ago
        • HarryDotter

          现在好了么?7号那天腾讯自己的问题,不管联通移动还是wifi接入电信,很多人都没法push。现在已经好了。

          2 years ago
  20. 摇滚

    从blogsearch搜到了这篇文章,真的很不错,希望能看到更多的新内容,已经订阅了rssfeed,祝博主好运:)

    2 years ago
  21. rushwing

    请问如何关闭路由器的DNS转发功能呢?我找了半天没找到(DNS forwording)
    我的无线路由是思科的WRH54G,刷的 DD-WRT的固件

    另外,DNS设置成8.8.8.8有任何意义吗?还是只是把DNS设置成一个invalid的DNS而已?

    2 years ago
    • 晓晓

      8.8.8.8是google的DNS。不是invalid。
      至于是否有意义,你可以自己试试。目前唯一已知对此有影响的网络因素就是这个了。

      DNS转发功能不是所有的路由器都有关闭选项的……

      2 years ago
  22. Wang

    "TLS链接一旦建立,在没有数据的情况下,只需要每隔15分钟进行一次保活的握手,因此几乎不占流量。而一旦因为意外原因导致链接中断,iPhone会不断重新尝试建立TLS链接,直到成功。

    "

    这里的15分钟是iphone默认强制的,还是可以配置的?

    "而一旦因为意外原因导致链接中断,iPhone会不断重新尝试建立TLS链接,直到成功"--->这句话的原文在哪里可以找到,我在APPLE网站上找不到这个描述,能否帮忙确认一下,谢谢

    2 years ago
    • 晓晓

      忘了是在dev-team还是哪里看的了。

      用push battery drain可以搜到关于这方面的很多讨论。出处反倒找不到了。

      2 years ago
    • 晓晓

      15是强制的。

      2 years ago
    • 晓晓

      想起来,貌似是在pushfix.info看到的。

      2 years ago
  23. cohen

    晓晓,如果我的iphone刷官方固件后,先用att的卡激活了,然后用黑雨越狱的话。
    我激活后的证书会在iphone里么?还能实现push么?

    2 years ago
    • 晓晓

      会在的,可以的呀。

      2 years ago
  24. 小斌

    学习了。我压根就没那个push文件。。哭泣。。。

    about a year ago
  25. jackeyzhou

    我这里通过pushfix_D修复了push

    查看了/var/mobile/Library/Preferences/com.apple.apsd.plist

    也的确是119字节,之前是没有这个文件

    照理说应该是已经成功取得了设备令牌

    但是一开始的时候可以PUSH成功,但是没几分钟就又不能用了

    QQ、Pushme.to都是一样的情况

    不管是在WIFI还是在CMNET下面都是一样

    我是日版的41周前,刷的自制系统,基带是04.28的

    请教这样的情况会是什么问题呢,谢谢

    about a year ago
    • 晓晓

      换个方式修复吧。pushfix_D导致的问题。

      about a year ago
      • jackeyzhou

        已经用Push Doctor修复了

        试了以下几个环境,都没有发现问题,仅供参考

        1、WIFI关闭DNS转发,使用202.96.209.5,202.96.209.133等公用DNS
        2、WIFI关闭DNS转发,使用8.8.8.8,4.4.4.4的DNS
        3、WIFI开启DNS转发
        4、EDGE网络(左上角显示E)
        5、GPRS网络(左上角显示O)

        然而在CMWAP的网络下,PUSH失败

        没有联通的3G卡,没有办法测试3G下面的PUSH

        还是感谢你的文章,受益匪浅

        about a year ago
        • 晓晓

          CMWAP下push失败是正常的。文章里也写了。
          感谢你的测试哈。

          about a year ago
  26. Cohen

    求助晓晓T.T。。我找同学借了张att的卡。。准备激活的。但是我重刷官方3。12固件,然后用这张卡激活。。itunes里面到是进入到iphone的设置界面了,可以管理同步iphone了。
    但问题是iphone主界面弹出,“正在激活 请稍候”。。。几乎就没什么进展了。。用att的卡在中国没信号。。难道一定要在att卡有信号的情况下才能激活么?那为什么itunes上的iphone的管理界面都出来了?

    about a year ago
    • 晓晓

      依据这里
      http://support.apple.com/kb/TS1556?viewlocale=zh_CN
      似乎确实需要手机信号。晓晓自己没有试过,所以不清楚呃……
      另外,也很难说会不会是3.1.2固件的原因。

      about a year ago
  27. Cohen

    那还是用push doctor方案了。。ms反映不错。。

    谢谢晓晓回应

    about a year ago
    • 晓晓

      wwwww不用客气,没能帮上忙……

      about a year ago
  28. franks

    谢谢楼主.

    那如果我现在有一个有效的SSL证书,那有什么办法可以生成一个device certificate然后解决Push串号的问题?

    about a year ago
  29. Guido

    不是故意留虚拟的EMAIL地址的,实在是……
    看了你的文章,非常受教!
    p,s,我用的是iPhone4,有查过你所说的那个文件,但是文件大小是156字节……

    about a year ago
    • 晓晓

      这片文章写作的时候iOS4还没有出来呢。显然现在有了变化。

      about a year ago
      • guidozeng

        我又来了。我就是上面的Guido。
        很感动你能回复我~
        没什么事,就是来马克一下。。。想知道这篇文章该怎么收藏和分享,嘿嘿!

        about a year ago
        • 晓晓

          啊啦,文章很老……都过时了……分享意义不大诶……收藏的话,用自己喜欢的方式就ok=w=

          about a year ago
  30. 大名狗剩

    写得很好,为初学者答疑解惑了!
    但是还有些疑问,想在这里问一下博主晓晓,麻烦解答一下吧:

    1.APNS,即apple push notification service,是由苹果公司提供的吗?提供APNS的服务器位于哪里呢?如果APNS服务器是由苹果公司提供并维护且位于美国等互联网发达国家,那么每条push信息岂不是要从IM服务器和APNS服务器间传递2次?这样不会导致很大的延迟吗?

    2.如果APNS服务器是由苹果公司提供并维护,那么苹果公司岂不是可以看到每一条push信息?

    3.苹果一家公司的APNS服务器要应对无数家公司的PUSH消息,苹果公司扛得住吗?

    请晓晓解答一下我的问题,最好是发到我的邮箱[email protected]里,多谢晓晓!

    about a year ago
    • 晓晓

      答案均为YES。

      about a year ago
  31. sxh

    为什么我的com.apple.apsd.plist文件是150多字节呢,这个是正常的吗?

    about a year ago
  32. LAUWHEE

    问下,我越狱后PUSH出问题,恢复固件后还有有问题,那升级固件还会存在问题吗?

    about a year ago
  33. zcw159357

    我用netstat查出来的确连不上5223的端口阿..wifi就可以 请问这怎么办阿

    about a year ago
  34. hotdrummer

    博主

    手上港版无锁的4代 push没有反应 那能不能用pushdoctor 来恢复来?
    我看push doctor的介绍 黑雨的是不能用这个软件修复的 会导致手机永久开不了机器 但是我是绿毒越狱的 有关系么??

    about a year ago
  35. Monitor

    感激涕零,我的assessment event 需要它

    about a year ago
  36. Cornwallis

    山东移动的cmnet接入点 也是不能推送的 不过浙江的倒是可以。

    9 months ago

你可能感兴趣的:(apple,qq,服务器,iPhone,token)