zoukankan      html  css  js  c++  java
  • 陌陌架构分享 – Apple Push Notification Service

    http://blog.latermoon.com/?p=878


    先描述下基本概念,标准的iPhone应用是没有后台运行的,要实现实时推送消息到手机,需要借助Apple提供的APNS服务。

    iPhone会和APNS服务器保持长连接,每台iPhone针对每个App都会有一个唯一Token,要向一台手机发送即时消息,需要自己的服务器和APNS服务器建立连接,然后将信息(Payload)和要发往的设备Token发送给APNS服务器,剩下的推送就交给Apple了。

    详细的官方文档:《Local and Push Notification Programming Guide

    以下是大杂烩:

    1. 不要用一个开源的叫javapns的lib来推送,这个项目代码臃肿混乱,过度设计,还内存溢出;可以使用notnoop.apns
    2. Push会延时,也会被丢弃,似乎网络情况,Push本身带有Expiry,超过该值APNS会丢掉Push
    3. Push有三个基本属性,alert、badge、sound,通过将一些置空,可以实现只修改App上的气泡不出现文本、出现文本但不提示声音,发出声音而不出现任何提示等等效果
    4. Push除了三个基本属性,还可以附带任意json数据,但总大小不能超过256字节
    5. 要异步发送Push,可以将应用内的Push序列化到Redis队列再消费,并且增加队列监控
    6. 和国外服务的连接速度比较慢,要建立多个连接,使用多线程发送
    7. APNS有提供feedback服务,用于查询一个Token是否有效
    8. 一台iPhone上的一个App会有两种Token,一种是Developer的,一种是正式Product的,不能混用,在一个与APNS的SSL连接里,使用Developer Token向Product发送Push是无法送达的,同时在十几秒内即使用正确的Product Token发送也无法送达,效果就像直接丢弃
    9. iPhone上的App处于前台运行时,即使受到Push也不会在界面出现提示,此时App内的回调函数会收到
    10. 高速地向一台设备发送大量Push,Apple会自动丢掉部分Push

  • 相关阅读:
    BASE64Encoder/BASE64Decoder(转)
    对象转化为json
    Intent
    RecyclerView的单击和长按事件(转)
    selector的例子
    修改app工程名 Android Studio
    The number of method references in a .dex file cannot exceed 64K.(转)
    $(function() {})
    jQuery插件开发的两种方法及$.fn.extend的详解(转)
    myeclipse2014安装aptana3.4.0插件(转)
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4926838.html
Copyright © 2011-2022 走看看