iOS开发--本地通知与远程通知

作者雷潮关注

2016.02.01 00:18*字数 1921阅读 7038评论 1喜欢 35

这里是指推送通知跟NSNotification有区别:

1、NSNotification是系统内部发出通知,一般用于内部事件的监听,或者状态的改变等等,是不可见的

2、本地通知与远程通知是可见的,主要用于告知用户或者发送一些App的内容更新,推送一些相关的消息,让用户知道App内部发生了什么事情。

Paste_Image.png

iOS常用通知

1、本地推送通知:(Local Notification)

2、远程推送通知:(Remote Notification)

iOS通知呈现效果(5)

1.设置音效,(提醒作用)

2.设置横幅,

3.设置弹窗,

4.锁屏下也可以呈现,

5.App图标的数字 (即新内容的数量)

至于显示横幅或者弹窗,取决于用户的设置

iOS手机设置中:通知中心-选择应用-选择应用下的通知模式-OK!

Paste_Image.png

通知的注意点

1、App在前台运行的时候,通知不会展示出来

2、点击通知,默认会自动打开推送通知的App

3、不管App是否打开,通知都可以如期发出

1、本地推送通知:

不需要联网就可以发出的通知

使用场景:

提醒用户完成一些任务,比如:定时提醒,生活备注,看电影等等

推送通知属性:

// 枚举值-发出通知的时间(有局限性)@property(nonatomic) NSCalendarUnit repeatInterval;// 自定义-发出通知的时间(可以自由设定时间)@property(nonatomic,copy) NSCalendar *repeatCalendar;// 区域-创建只需要创建一个中心点与半径就可以了@property(nonatomic,copy) CLRegion *region// 进入区域发出一个通知,设置yes,只会发出一个通知,设置NO就会每次进入这个区域都发送@property(nonatomic,assign) BOOL regionTriggersOnce NO// 设置通知的内容@property(nonatomic,copy) NSString *alertBody;// 决定alertAction是否生效@property(nonatomic) BOOL hasAction;// 设置滑块的文字@property(nonatomic,copy) NSString *alertAction;// 设置点击通知的启动图片(一般设置App启动图片后,这里可以随便写)@property(nonatomic,copy) NSString *alertLaunchImage;// 设置alertTitle,就是通知内容上面的文字@property(nonatomic,copy) NSString *alertTitle// 设置弹出的声音@property(nonatomic,copy) NSString *soundName;// 设置App的消息条数@property(nonatomic) NSInteger applicationIconBadgeNumber;// 设置通知一些额外数据@property(nonatomic,copy) NSDictionary *userInfo;

如何发出本地通知:

// 1.创建本地通知UILocalNotification*localNote = [[UILocalNotificationalloc] init];// 2.设置本地通知的内容// 2.1.设置通知发出的时间localNote.fireDate = [NSDatedateWithTimeIntervalSinceNow:3.0];// 2.2.设置通知的内容localNote.alertBody =@"在干吗?";// 2.3.设置滑块的文字(锁屏状态下:滑动来“解锁”)localNote.alertAction =@"解锁";// 2.4.决定alertAction是否生效localNote.hasAction =NO;// 2.5.设置点击通知的启动图片localNote.alertLaunchImage =@"123Abc";// 2.6.设置alertTitlelocalNote.alertTitle =@"你有一条新通知";// 2.7.设置有通知时的音效localNote.soundName =@"buyao.wav";// 2.8.设置应用程序图标右上角的数字localNote.applicationIconBadgeNumber =999;// 2.9.设置额外信息localNote.userInfo = @{@"type": @1};// 3.调用通知[[UIApplicationsharedApplication] scheduleLocalNotification:localNote];}

使用注意:

iOS7,不需要用户授权就可发出通知,而iOS8以后,必须用户授权才可以发出通知

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {// 设置应用程序的图标右上角的数字[application setApplicationIconBadgeNumber:0];if([[UIDevicecurrentDevice].systemVersion doubleValue] >=8.0) {UIUserNotificationSettings*settings = [UIUserNotificationSettingssettingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSoundcategories:nil];        [application registerUserNotificationSettings:settings];    }// 界面的跳转(针对应用程序被杀死的状态下的跳转)// 杀死状态下的,界面跳转并不会执行下面的方法- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification,// 所以我们在写本地通知的时候,要在这个与下面方法中写,但要判断,是通过哪种类型通知来打开的if(launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {// 跳转代码UILabel*redView = [[UILabelalloc] init];        redView.frame =CGRectMake(0,0,200,300);        redView.numberOfLines =0;        redView.font = [UIFontsystemFontOfSize:12.0];        redView.backgroundColor = [UIColorredColor];        redView.text = [NSStringstringWithFormat:@"%@", launchOptions];        [self.window.rootViewController.view addSubview:redView];    }returnYES;}

监听通知,如果用户打开通知,可以让用户进入一些特定的界面

/*

应用程序在进入前台,或者在前台的时候都会执行该方法

*/- (void)application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification*)notification{// 必须要监听--应用程序在后台的时候进行的跳转if(application.applicationState ==UIApplicationStateInactive) {NSLog(@"进行界面的跳转");// 如果在上面的通知方法中设置了一些,可以在这里打印额外信息的内容,就做到监听,也就可以根据额外信息,做出相应的判断NSLog(@"%@", notification.userInfo);//UIView*redView = [[UIViewalloc] init];        redView.frame =CGRectMake(0,0,100,100);        redView.backgroundColor = [UIColorredColor];        [self.window.rootViewController.view addSubview:redView];    }}

2、远程推送通知:

从远程服务器推送给客户端的通知(需要联网)

远程推送服务---就是APNs

模拟器无法调试远程推送

为什么需要远程推送通知:

解决获取传统数据的局限性,让数据实时更新

使用场景:

聊天功能(一般非即时聊天)、推送一下App的内部新功能、版本下载等

注:所有的苹果设备,在联网状态下,都会与苹果的服务器建立-长连接

长连接的作用:

时间效准、系统升级、查找我的iphone、远程通知

好处:

数据传输快、数据保持最新状态

Paste_Image.png

Paste_Image.png

Paste_Image.png

我在面试中一般也比较喜欢问面试者这个问题。能解释清楚肯定就有货真价实的开发经验

使用远程推送

1、获取苹果获得deviceToken-获取手机UDID+应用的唯一标识(bundel ID)

2、得到苹果返回的deviceToken

3、发送deviceToken给公司的服务器

4、监听用户对通知的点击

如何调试远程推送功能

1、真机

2、调试推送需要的证书文件

证书自己配置。。。

3、发布具有推送服务的App

包含推送的cer证书+某个具有发布资格的电脑,就可以发布

如何推送

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {if([[UIDevicecurrentDevice].systemVersion doubleValue] >=8.0) {//iOS8UIUserNotificationSettings*settings = [UIUserNotificationSettingssettingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSoundcategories:nil];        [application registerUserNotificationSettings:settings];        [application registerForRemoteNotifications];    }else{// iOS7[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeNewsstandContentAvailability|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert];    }// 根据远程通知通过UIApplicationLaunchOptionsRemoteNotificationKey打开的情况来进行if(launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {// 跳转// 添加一个红色的View}returnYES;}

// 获取DeviceToken-(void)application:(UIApplication*)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{// 将DeviceToken传给服务器NSLog(@"%@", deviceToken.description);}

// 正常接到远程通知的时候会调用这个方法-(void)application:(UIApplication*)applicationdidReceiveRemoteNotification:(NSDictionary*)userInfo{NSLog(@"%@", userInfo);// 正常打开推送后,}

// 后台操作(根据收到推送,让程序自己执行一些操作,不管用户是否点击推送)- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchCompletionHandler:(void(^)(UIBackgroundFetchResult))completionHandler{NSLog(@"---------");UIView*redV = [[UIViewalloc] init];    redView.backgroundColor = [UIColorredColor];    redView.frame =CGRectMake(100,100,100,100);    [self.window.rootViewController.view addSubview:redV];// 1.打开后台模式 2.告诉系统是否有新内容的更新 3.发送的通知有固定的格式("content-available":"1")// 2.告诉系统有新内容completionHandler(UIBackgroundFetchResultNewData);}

1、打开后台模式

Paste_Image.png

2、告诉系统有新内容

completionHandler(UIBackgroundFetchResultNewData);

3、发送通知有固定格式

("content-available":"1")

找的这张图:也有相应的模拟推送代码,需要的可以联系我

Paste_Image.png

一般开发中直接使用(jpush)激光推送就可以快速完成App的推送功能。具体按照官方文档来进行.(有空会写一篇专门针对激光推送的文稿)

iOS开发

© 著作权归作者所有

举报文章

关注雷潮

写了 80940 字,被 287 人关注,获得了 240 个喜欢

追寻梦想,成就自己。虚拟现实群:134688909(此群已满) 二群494141729(正在火...

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

赞赏支持

喜欢

35

更多分享

登录后发表评论

1条评论只看作者

按喜欢排序按时间正序按时间倒序

小泥巴超人

2楼 · 2016.10.26 21:08

很棒诶

回复

被以下专题收入,发现更多相似内容

iOS即时通讯

iOS开发技术分享

iOS 通知

疑惑

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

推荐阅读更多精彩内容