iOS推送机制

作者: 淇滨杜隆坦 | 来源:发表于2016-06-11 08:41 被阅读237次

原文地址:原文地址

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

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

  • 苹果把这个长连接开放出来给大家推送消息用,很积德,因为这是个全球服务,几十亿台ios设备,服务器少说也需要上万台,还没有钱可以赚. andorid的爸爸就不做这个,于是各个app为了发消息,只能直接拼命赖在后台维持一个长连接,电就是这样被耗光的

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

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

  • 标示用户手机的ID 叫做 device tokens,每个手机都不一样,deviceToken非常重要

推送流程:

image
  1. 首先是应用程序注册消息推送。
  2. IOS跟APNS Server要deviceToken。应用程序接受deviceToken。
  3. 应用程序将deviceToken发送给PUSH服务端程序(Provider)。
  4. 服务端程序向APNS服务发送消息。
  5. APNS服务将消息发送给iPhone应用程序。

device tokens

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

  • 获取device tokens 很简单,只需要实现下面这个函数
    (void)application:(UIApplication)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData)deviceToken
    在这个函数里面,你把deviceToken保存到你服务器上即可,这个函数是个call back函数,ios从apns得到deviceToken,就传给它,你需要做的,写一段保存 这个token的代码

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

app支持推送的技术实现

要实现推送功能,你需要干如下几件事情:

  1. 你需要写3段程序

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

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

先说2,3两点

  • 下载cer文件,是推送程序要用,因为要通过ssl信道发送数据
  • 填写并下载Provisioning Profile,并从xcode加入到你的app项目文件中,你可以理解为办手续,总不能无证乱发吧

需要写的3段程序分别是

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

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

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:     
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound |
 UIRemoteNotificationTypeAlert)];
   加在app初始化函数里面即可
  • 最后是:推送程序,这个代码量可能最多.逻辑很简单:遍历你的存放devictTokent的数据表,逐一发消息给苹果的APNS服务器.推送程序,有很多开源代码,用APNS为关键词,一搜一大把,各种语言都有,改改就能用

苹APNS服务器地址:gateway.push.apple.com,端口是 2195
以前看到有人吹嘘自己100万用户规模消息推送,这个有技术含量么? 就是1000万用户也得一个一个都发完,多进程?长连接?epoll? 能发多快,苹果说了算

相关文章

  • UILocalNotification

    iOS提供两种推送机制: 本地推送通知(Local Notification)与远程推送通知(Remote Not...

  • iOS_推送原理

    iOS 消息推送机制原理与实现苹果信息推送服务(Apple Push Notification Service),...

  • 推送消息机制

    一、简介 iOS推送机制分为本地通知(Local Notifications)和远程推送(Remote Notif...

  • ios推送原理

    (由于项目用的onesignal推送,这里稍微说了下onesignal在推送中的角色) 一、推送机制 iOS消息推...

  • iOS制作推送所需的pem文件

    首先是简单了解APNS的推送机制 苹果官方给出的对ios推送机制的解释,见图: Provider就是我们自己程序的...

  • 458,IOS的推送原理(面试点:推送注册和发送消息推送步骤:1

    1. 简介 1.1 推送机制介绍 首先我们看一下苹果官方给出的对ios推送机制的解释。如下图 Provider就是...

  • 技术博客

    iOS简单国际化的处理 collectionView的规则流水布局与不规则流水布局 iOS消息推送机制 iOS知识...

  • iOS推送原理详解

    1.APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释。如下图 Provider就是我们自己程...

  • iOS推送机制

    原文地址:原文地址 研究了一下Apple Push Notification Service,实现很简单,很环保....

  • iOS推送机制

    APNS的推送机制 APNS apple push notification Service的缩写 自己应用程序...

网友评论

    本文标题:iOS推送机制

    本文链接:https://www.haomeiwen.com/subject/dvnsdttx.html