ios 远程通知(Remote Notification)和本地通知(Local Notification)

  ios通知分为远程通知和本地通知,远程通知需要连接网络,本地通知是不需要的,不管用户是打开应用还是关闭应用,我们的通知都会发出,并被客户端收到

  我们使用远程通知主要是随时更新最新的数据给用户,使用本地通知主要是提醒用户来完成一些任务

  

  远程通知 Remote Notification:

  其主要的工作原理为:客户端发送自己的UUID和Bundle ID给苹果的APNs服务器-->苹果的APNs服务器加密后返回一个deviceToken给客户端-->客户端拿到devideToken后将其发送给app公司提供的服务器-->此服务器将客户端的deviceToken存储到数据库-->当服务器要发送远程通知给客户端的时候,会在数据库中拿到此客户端的deviceToken-->发送数据到苹果的APNs服务器,然后再发送到客户端

  远程通知是需要真机的,另外还需要去苹果开发者中心申请证书:真机调试证书,远程推送证书(要在哪台电脑上调试或发布哪个app),描述文件证书(哪台电脑利用哪个设备调试哪个app)

  我们可以使用PushMebaby来模拟服务器,也可以利用第三方软件来发送通知如Jpush等

  下面是代码的实现:

 1 -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 2 {
 3     if ([UIDevice currentDevice].systemVersion.doubleValue < 8.0){ // 小于ios8
 4
 5         UIRemoteNotificationType type = UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge;
 6
 7         // 系统自动发送UUID和Bundle ID到苹果APNs服务器
 8         [application registerForRemoteNotificationTypes:type];
 9     }else{ // 大于等于ios8
10
11         UIUserNotificationType type = UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound;
12
13         UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil];
14         // 通知类型
15         [application registerUserNotificationSettings:settings];
16
17         // 注册通知
18         [application registerForRemoteNotifications];
19     }
20
21     // 可以获取到userInfo数据
22     NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsAnnotationKey];
23
24     return YES;
25 }
26
27 // 获得deviceToken
28 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
29 {
30     NSLog(@"%@",deviceToken);
31 }
32
33 // ios7之前调用,接收到远程通知的内容会调用
34 // 程序是打开状态,不管前台还是后台,会调用这个方法
35 // 如果程序是关闭状态不会调用这个,会调用application: didFinishLaunchingWithOptions:
36 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
37 {
38     NSLog(@"%@",userInfo);
39 }
40
41 // ios7之后调用,如果接收到远程通知的内容会调用这个方法
42 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
43 {
44     // 这个方法需要调用这个block来通知系统更新UI界面
45     // UIBackgroundFetchResultNewData, 接收到数据
46     // UIBackgroundFetchResultNoData, 没有接收到数据
47     // UIBackgroundFetchResultFailed 接收数据失败
48     completionHandler(UIBackgroundFetchResultNewData);
49
50 }

  

  本地通知 Local Notification

  基本属性和方法:

  属性:

  • 指定通知发送的时间:NSDate *fireDate
  • 指定发送通知的时区:NSTimeZone *timeZone
  • 重复的周期: repeatInterval
  • 通知内容:NSString *alertBody
  • 锁屏状态的标题:NSString *alertAction
  • 点击通知之后的启动图片:NSString *alertLaunchImage
  • 收到通知播放的音乐:NSString *soundName
  • 图标提醒数字:NSInteger applicationIconBadgeNumber
  • 额外的信息:NSDictionary *userInfo

  方法:

  • 立即执行:- (void)presentLocalNotificationNow:(UILocalNotification *)notification
  • 注册通知,根据指定发送时间执行:- (void)scheduleLocalNotification:(UILocalNotification *)notification
  • 取消单个通知:- (void)cancelLocalNotification:(UILocalNotification *)notification
  • 取消所有通知:- (void)cancelAllLocalNotifications

  下面是代码实现:

 1 // 创建本地通知对象
 2     UILocalNotification *noti = [[UILocalNotification alloc] init];
 3
 4     // 指定通知发送的时间10s
 5     noti.fireDate = [NSDate dateWithTimeIntervalSinceNow:10.0f];
 6     // 指定时区
 7     noti.timeZone = [NSTimeZone defaultTimeZone];
 8     // 指定通知内容
 9     noti.alertBody = @"这是通知的内容";
10
11     // 设置通知重复的周期(1分钟)
12     noti.repeatInterval = NSCalendarUnitSecond;
13
14     // 指定锁屏界面的信息
15     noti.alertAction = @"这是锁屏界面的信息";
16
17     // 设置点击通知进入程序时候的启动图片
18     noti.alertLaunchImage = @"xxx";
19
20     // 收到通知播放的音乐
21     noti.soundName = @"hehe.wav";
22
23     // 设置应用程序的提醒图标
24     noti.applicationIconBadgeNumber = 99;
25
26     // 注册通知时可以指定将来点击通知之后需要传递的数据
27     noti.userInfo = @{@"dogName":@"xx1",
28                       @"weight":@(20)
29                       };
30
31     // 注册添加通知
32     UIApplication *app =  [UIApplication sharedApplication];
33     [app scheduleLocalNotification:noti];

  注意:在ios8中需要提前注册通知类型

 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 2     // Override point for customization after application launch.
 3
 4     // 注意: 在iOS8中, 必须提前注册通知类型
 5     if ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) {
 6         UIUserNotificationType type = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;
 7         UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil];
 8         // 注册通知类型
 9         [application registerUserNotificationSettings:settings];
10     }
11 }
12
13 // 接收到本地通知时就会调用,前台自动调用,后台点击通知后调用
14 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
15 {
16     NSLog(@"%@",notification.userInfo);
17 }

  

时间: 2024-10-08 22:43:12

ios 远程通知(Remote Notification)和本地通知(Local Notification)的相关文章

cordova插件之Local Notification(本地通知)

原文链接:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/cordova-pluginslocal-notification/ 本地通知的基本目的是使应用程序能够通知用户,它为他们提供了一些信息例如,当应用程序没有在前台运行时,通知用户一个消息或即将到来的约会.本地通知大多是基于时间的,如果触发就会在通知中心显示并呈现给用户. local notification插件可以通过schedule()一次安排一个或多个本地通知,这些通

ios开发——实用技术OC-Swift篇&amp;本地通知与远程通知详解

本地通知与远程通知详解 一:本地通知 Local Notification的作用 Local Notification(本地通知) :是根据本机状态做出的通知行为,因此,凡是仅需依赖本机状态即可判断需要发出通知的行为都可以或者说应该使用Local Notification来处理.比方说:iBeacon中进入了某个Beacon region,或者说自定义的一些定时提醒等. 构建Local Notification 在iOS中,构建LocalNotification非常简单,只需要掌握好NSLoca

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

iOS开发--本地通知与远程通知 作者 雷潮 关注 2016.02.01 00:18* 字数 1921 阅读 8898评论 1喜欢 41 这里是指推送通知跟NSNotification有区别: 1.NSNotification是系统内部发出通知,一般用于内部事件的监听,或者状态的改变等等,是不可见的2.本地通知与远程通知是可见的,主要用于告知用户或者发送一些App的内容更新,推送一些相关的消息,让用户知道App内部发生了什么事情. Paste_Image.png iOS常用通知 1.本地推送通知

iOS开发---本地通知(UILocalNotification)

iOS开发---本地通知(UILocalNotification) 标签: ios本地通知 2016-07-12 10:28 1437人阅读 评论(0) 收藏 举报  分类: iOS(25)  版权声明:本文为博主原创文章,转载请注明出处. iOS中通知机制又叫消息机制,其包括两类:一类是本地通知:另一类是推送通知,也叫远程通知. 本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时.待办事项提醒,又或者一个应用在一段时候后不使用通常会提示用户使用此应用等都是本地通知.创建一

swift 本地通知、远程通知

无论是远程推送.本地推送   都需要注册通知代码 iOS 8  把原先一步到位的  RemoteNotification  的注册分成两部分,一部分是注册新引入的那个「 UIUserNotificationSettings 」,另一部分是  RemoteNotifications . 事实上, Apple  在  iOS 8  将 RemoteNotification  和 LocalNotification  统一了起来 .两种  Notifications  将统一由  UIUserNoti

iOS开发——本地通知

本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时.待办事项提醒,又或者一个应用在一段时候后不使用通常会提示用户使用此应用等都是本地通知.创建一个本地通知通常分为以下几个步骤: 创建UILocalNotification. 设置处理通知的时间fireDate. 配置通知的内容:通知主体.通知声音.图标数字等. 配置通知传递的自定义数据参数userInfo(这一步可选). 调用通知,可以使用scheduleLocalNotification:按计划调度一个通知,也可以使用pr

本地通知之闹钟

在现阶的APP中关于消息的处理需求越来越大,系统需要将一下消息以音频或者文字的形式提示用户,这里便用到推送,推送消息主要有本地和远程推送,今天我们先研究一下简单的本地通知,下面以闹钟为例子. 1.我们首先要注册通知 UIApplication * application=[UIApplication sharedApplication]; //如果当前应用程序没有注册本地通知,需要注册 if([application currentUserNotificationSettings].types=

UILocalNotification本地通知

// 执行通知一定要退出应用或挂起应用(进入后台)才能收到通知. 1.在iOS8及其以后版本中使用本地消息需要先获得用户的许可,否则无法成功注册本地消息.因此,我们将询问用户许可的代码片段添加到了app启动后的入口方法中(AppDelegate中的didFinishLaunchingWithOptions) func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSOb

iOS_35本地通知

应用程序代理 // // BeyondAppDelegate.m // 35_本地通知 // // Created by beyond on 14-9-12. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import "BeyondAppDelegate.h" @implementation BeyondAppDelegate - (BOOL)application:(UIApplication *)appli