最清晰的ios消息推送机制教程

研究了一下Apple Push Notification Service,实现的很简单,很环保.原理以下mysql

  • 财大气粗的苹果提供了一堆服务器,每一个ios设备和这些服务器保持了一个长链接,ios版本更新提示,手机时钟校准什么的都是经过这个链接.ios

  • 苹果把这个长链接开放出来给你们推送消息用,很积德,由于这是个全球服务,几十亿台ios设备,服务器少说也须要上万台,尚未钱能够赚. andorid的爸爸就不作这个,因而各个app为了发消息,只能直接拼命赖在后台维持一个长链接,电就是这样被耗光的sql

  • 苹果提供消息服务简称为APNS,只是是长链接机器的一部分,你要向你的用户发消息,必须经过apns中转,你写程序发给它,它转发给你的手机,你的推送程序和用户手机没有直接联系数据库

  • 消息推送不支持群发,只能一个一个发.若是你的App有100万个用户,要发消息怎么办? 一个一个的发呗,发100万次.消息包大概包括两部分:标示用户手机的id(32个字节)+消息体(<=256Bytes),消息体是json字符串,传输过程用ssl加密的json

  • 标示用户手机的ID 叫作 device tokens,每一个手机都不同,deviceToken很是重要xcode

device tokens

device tokens每一个机器都不同,比较独一无二,可是不是硬件码,若是你重装了ios系统,可能会发生变化.其实 device tokens 也是用户的手机发起请求,由apns生成的,能够相信,apns后台有一个key-value数据库.服务器

获取device tokens 很简单,只须要实现下面这个函数app

(void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken函数

在这个函数里面,你把deviceToken保存到你服务器上便可,这个函数是个call back函数,ios从apns获得deviceToken,就传给它,你须要作的,写一段保存 这个token的代码post

注意:苹果没有承诺deviceToken的生成机制,随时可能变化,最好的方法是你第一次获取到deviceToken以后,也提交,而后存在本地,以后每次都比较,发现有变化,就更新你的服务器上的记录

app支持推送的技术实现

要实现推送功能,你须要干以下几件事情

  1. 你须要写3段程序

  2. 到苹果开发者中心注册一次,并下载一份cer文件

  3. 从苹果的Provisioning Portal,填写并下载一个Provisioning Profile

先说2,3两点

  • 下载cer文件,是推送程序要用,由于要经过ssl信道发送数据

  • 填写并下载Provisioning Profile,并从xcode加入到你的app项目文件中,你能够理解为办手续,总不能无证乱发吧,

须要写的3段程序分别是

  1. 前文提到的保存device token的代码,很简单的,随便搭个http服务,用mysql建个表,你在app里面用http post提交就行

  2. 第二段程序是:你的app必须作个标记,告诉ios,你会给用户产生推送消息,这个代码很简单,一句话搞定

     [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
         (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

    加在app初始化函数里面便可


  3. 最后是:推送程序,这个代码量可能最多.逻辑很简单:遍历你的存放devictTokent的数据表,逐一发消息给苹果的APNS服务器.推送程序,有不少开源代码,用APNS为关键词,一搜一大把,各类语言都有,改改就能用

苹APNS服务器地址:gateway.push.apple.com,端口是 2195

之前看到有人吹嘘本身100万用户规模消息推送,这个有技术含量么? 就是1000万用户也得一个一个都发完,多进程?长链接?epoll? 能发多快,苹果说了算

相关文章
相关标签/搜索