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

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

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

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

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

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

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段程序分别是

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

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

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

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

    以前看到有人吹嘘自己100万用户规模消息推送,这个有技术含量么? 就是1000万用户也得一个一个都发完,多进程?长连接?epoll? 能发多快,苹果说了(转)

最清晰的ios消息推送机制教程的更多相关文章

  1. (转)iOS消息推送机制的实现

    原:http://www.cnblogs.com/qq78292959/archive/2012/07/16/2593651.html iOS消息推送机制的实现 iOS消息推送的工作机制可以简单的用下 ...

  2. ios消息推送机制原理与实现

    本文转载至 http://hi.baidu.com/yang_qi168/item/480304c542fd246489ad9e91 Push的原理: Push 的工作机制可以简单的概括为下图 图中, ...

  3. 【iOS】iOS消息推送机制的实现

    iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务 ...

  4. iOS消息推送机制

    iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务 ...

  5. iOS消息推送机制的实现

    研究了一下Apple Push Notification Service,实现的很简单,很环保.原理如下 财大气粗的苹果提供了一堆服务器,每个ios设备和这些服务器保持了一个长连接,ios版本更新提示 ...

  6. (转)iOS消息推送机制中pem文件的生成

    转自:http://2015.iteye.com/blog/1567777 以前写了一篇文章:iOS消息推送机制的实现,这篇文章中生成的是p12文件,但是php是用的pem文件,生成的方法和p12文件 ...

  7. Ios 消息推送

    手把手教你做iOS推送 http://www.cocoachina.com/industry/20130321/5862.html http://www.cnblogs.com/cdts_change ...

  8. ios 消息推送流程 转载

    iOS开发:推送通知简述及开发实践热度 1已有 706 次阅读 2013-10-15 09:23 |个人分类:经验之谈|系统分类:ios| IOS, 推送一.关于推送通知 推送通知,也被叫做远程通知, ...

  9. iOS的推送机制APNs:本地推送&远程推送

    本地推送: 本地推送主要应用在备忘录,闹钟等本地的,基于时间定时的消息提醒.本篇不做详细描述. 远程推送:APNS(苹果推送通知服务) iOS远程推送机制的原理及流程: 注册推送(橙色部分):若该Ap ...

随机推荐

  1. 实例讲解Nginx下的rewrite规则

    一.正则表达式匹配,其中:* ~ 为区分大小写匹配* ~* 为不区分大小写匹配* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配二.文件及目录匹配,其中:* -f和!-f用来判断是否存在文件* ...

  2. 【.Net免费公开课】--授技.Net中的高帅富技术-"工作流"

    课程简介 免费公开课主题: .Net中的高帅富技术-“工作流” 公开课开课时间:     10月17日 19:30--21:30 公开课YY频道:       85155393   (重要:公开课QQ ...

  3. Android开发框架之xUtils学习

    1.一个非作者弄的xUtils API文档: http://xutilsapi.oschina.mopaas.com/overview-summary.html 2.使用xUtils用户的一些博客文档 ...

  4. bzoj1433:[ZJOI2009]假期的宿舍

    明显的二分图最大匹配. #include<cstdio> #include<cstring> #include<cctype> #include<algori ...

  5. [POJ 3370] Halloween treats

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7143   Accepted: 2641 ...

  6. 【Pure】

    PureA set of small, responsive CSS modules that you can use in every web project.http://purecss.io/

  7. 陈正冲老师讲c语言之声明和定义的区别

    什么是定义?什么是声明?它们有何区别? 举个例子: A)int i; B)extern int i;(关于extern,后面解释) 哪个是定义?哪个是声明?或者都是定义或者都是声明?我所教过的学生几乎 ...

  8. 实现sqrt()函数

    求一个正数N的开方, 并且可以指定精度, 要求不能用库函数sqrt 方法一:如下所示,先求sqrt(N)的整数部分,再求小数点后1位,2位 ... ... 方法二:牛顿迭代法,根据公式 Ai+1 = ...

  9. Spring AOP--基于XML文件的配置

    Spring AOP的配置可以基于注解,也可以基于XML文件.前面几篇都是使用注解的方式.下面介绍下使用XML文件如何配置 使用的测试类和切面类都类似.只需要属于AOP的注解去掉即可.下面是AOP的X ...

  10. UVA 11488-Hyper Prefix Sets(Trie)

    题意: 给一个01串的集合,一个集合的幸运值是串的个数*集合中串的最大公共前缀 ,求所有子集中最大幸运值 分析: val[N]表示经过每个节点串的个数求幸运值 求就是每个节点值*该节点的深度 搜一遍树 ...