IOS推送

推送:

用户被动的接收消息,是程序在后台的一种通知机制推送通知跟NSNotification不同
1.NSNotification是抽象的,不可见的
2.推送通知是可见的

IOS中提供了两种推送通知

1.本地推送通知(Local Notification)
2.远程推送通知(Remote Notification)

源生和极光

推送的作用:可以让不在前台运行的app,告知客户app内部发生的事情。(QQ消息推送,微信消息推送等)

推送通知的呈现效果:

1.在屏幕顶部显示的一条横幅
2.在屏幕中间弹出一个UIAlertView
3.在锁屏界面显示一块横幅
4.更新app图标的数字
5.播放提示音

PS:工作常用、面试必问

推送

源生方法

  • 推送原理
    1.应用程序注册消息推送。
    2.IOS从APNS Server获取device token,应用程序接收device token.
    3.应用程序将device token发送给PUSH服务端程序
    4.服务端向APNS发送推送消息
    5.APNS服务将消息发送给iPhone应用程序
Paste_Image.png

一、推送证书

二、配置工程

三、需要实现的代码

首先由应用注册远程通知。注册成功之后APNS会返回一个唯一标识的设备令牌码deviceToken,应用拿到分配的设备令牌码之后,需要将该设备的设备令牌码连同其他设备以及账户相关信息(如果有必要的话)传递给该应用对应的后台服务器。当后台服务器需要推送消息时,就将消息以及需要推送设备对应的deviceToken传递给APNS,由APNS完成推送工作
建立我们的推送的项目(注意Bundleldentifier必须和我们推送应用的App id一致
在AppDelegate里didiFinishLaunchingWithOptions函数里写

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSdicionary *)launchOptions {
......
//推送的形式:标记,声音,提示
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
   return YES;
}
 
- (void)application:(UIApplication *)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken {
   NSLog(@"regisger success:%@",pToken);
   //注册成功,将deviceToken保存到应用服务器数据库中
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
    // 处理推送消息
    NSLog(@"userinfo:%@",userInfo);
   
    NSLog(@"收到推送消息:%@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]);
 //Icon推送数量设为0  
//    application.applicationIconBadgeNumber=0;  

}
- (void)application:(UIApplication *)applicationdidFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
   NSLog(@"Registfail%@",error);
}

我们运行程序的时候会有提示,说我们的程序要发送推送通知。
应用程序不出在后台,且通过推送通知打开的时候,如果需要推送下来相关的信息可以在

- (**BOOL**)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  

方法中加入

 ///应用程序不处在后台,并且是通过推送打开应用的时候  
** ****if** (launchOptions) {  
     ///获取到推送相关的信息  
     NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];  
 }  

第三方
极光推送、友盟等
详见官网
https://www.jpush.cn/

什么是远程推送?
远程:从远程服务器推送给客户端的通知(需要联网)
从服务器发送了一个通知,接收到通知以后做的和本地通知类似的事情,这个通知只不过是从远方的服务器传过来的,要做的这个远程推送通知是由远程推送服务,又称为APNS(Apple Push Notification Services:苹果推送通知服务),苹果给我们提供了这个服务就可以做远程推送服务了。
为什么要用苹果的服务器?-->我们都知道,程序在或者的时候是可以跟自己的服务器进行交互的(程序或着可以执行代码),但只要用户关闭了app,就无法跟app的服务器沟通,无法从服务器上获得最新的数据内容。我们在使用QQ的时候,即使没有登录QQ也能收到信息,这就是用远程推送通知做的,不管登录还是没有登录QQ,都可以接收到信息(前提是联网状态下)

  • 远程推送通知使用须知
    所有的苹果设备在联网的状态下,都会与苹果的设备建立长连接(只要建立连接,想发送数据,随时都可以发送,始终保持连接)苹果有一个服务器集群,跟所有的苹果设备建立长连接
  • 长连接的作用
    时间校准、系统升级、查找我的iPhone
  • 长连接的好处
    数据保持最新状态,数据传输快(以前的连接需要根据协议多次进行连接,苹果的直接就是已经连接上的了)。只要和苹果的设备保持长连接就可以享受苹果的APNS服务,举个例子:

比如说我AgentLXJ现在有一部IPhone手机,手机里面有很多应用比如QQ,QQ有服务器吧,我的手机现在联网并且QQ软件要打开,陌陌的服务器就可以和我交互,我想传递消息,或者我接收到了消息,陌陌服务器金额以直接的告诉我.如果退出了QQ(不是卸载),但我的手机还在联网,这时QQ就不能给我推送消息,这时候苹果的服务就可以,只要我的手机在联网状态下(苹果建立的就是长连接),苹果要给我推送消息要是知道是哪个设备,怎么区分是哪一台设备呢?我们的手机都有自己的唯一标识,有了设备的唯一标识就知道推送给哪一台设备,但是还有一个问题,我的手机上不可能只有QQ这么一个软件,比如还有微信,陌陌等软件,所以苹果还要知道软件的BundleID(应用程序的唯一标识),有了设备和程序的唯一标识,就知道了推送给哪个设备的哪个应用程序.现在又有了一个问题,苹果不知道要推送什么消息内容.这里说明一个概念:消息体(来源:是谁发给我的,比如是:小媳妇.消息内容:比如给我说的是:吃饭了么?),苹果不知道这个消息体,但这个消息QQ知道,我的小媳妇发的这个消息体先到QQ服务器(告诉QQ我要给他发送一条消息),QQ服务器先看看被接受的人(我)在线没有,在线了直接发过去就完了,如果我不在线,这时苹果服务器可以发送,所以要发给苹果服务器,但是发给苹果服务器是有要求的1:交99美元成为开发者才能享受此服务.2:消息体 3目标的DeviceToken,QQ的服务器没有资格保存每一个设备的唯一标识和BundleID,苹果想了一个办法,叫做DeviceToken(APPID(应用位置标识)和UUID(设备唯一标识)).告诉我这三点苹果就可以帮我们做事情,怎么解析DeviceToken苹果知道,所以QQ有一个数据库,一旦有人注册或者是登陆(因为手机和苹果是长连接,一旦登陆或注册之前就会发送设备ID和软件ID,并在苹果服务器获得DeviceToken)QQ数据库就会存用户的信息,比如ID,名字,性别,DeviceToken(假如我的DeviceToken经苹果的加密生成的是ApentLXJ)等等信息,DeviceToken在每次登陆的时候保存,因为用户有可能换手机,一旦换手机用户的UUID就换了,这时需要重新生成一个DeviceToken,然后把最新的Devicetoken保存到服务器中,小媳妇我发消息的时候就去找苹果,看是否符合上面你的三条(交过钱了,有消息体,有目标的DeviceToken:ApentLXJ)),一看都符合就发给我了
补充的:一个手机有多少个应用程序就有多少个DeviceToken,
如果QQ同时推送给多台设备?比如我的QQ手机上登了,IPAD上也登了,这时候取决于QQ服务器的发给苹果的APNS的DeviceToken,发一个就发给一台设备,两个DeviceToken,就发给两台设备.*

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,653评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,321评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,833评论 0 324
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,472评论 1 266
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,306评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,274评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,658评论 3 385
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,335评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,638评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,697评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,454评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,311评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,699评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,986评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,254评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,647评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,847评论 2 335

推荐阅读更多精彩内容