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

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

  

  远程通知 Remote Notification:

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

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

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

  下面是代码的实现:

 -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([UIDevice currentDevice].systemVersion.doubleValue < 8.0){ // 小于ios8 UIRemoteNotificationType type = UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge; // 系统自动发送UUID和Bundle ID到苹果APNs服务器
[application registerForRemoteNotificationTypes:type];
}else{ // 大于等于ios8 UIUserNotificationType type = UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound; UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil];
// 通知类型
[application registerUserNotificationSettings:settings]; // 注册通知
[application registerForRemoteNotifications];
} // 可以获取到userInfo数据
NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsAnnotationKey]; return YES;
} // 获得deviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSLog(@"%@",deviceToken);
} // ios7之前调用,接收到远程通知的内容会调用
// 程序是打开状态,不管前台还是后台,会调用这个方法
// 如果程序是关闭状态不会调用这个,会调用application: didFinishLaunchingWithOptions:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSLog(@"%@",userInfo);
} // ios7之后调用,如果接收到远程通知的内容会调用这个方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
// 这个方法需要调用这个block来通知系统更新UI界面
// UIBackgroundFetchResultNewData, 接收到数据
// UIBackgroundFetchResultNoData, 没有接收到数据
// UIBackgroundFetchResultFailed 接收数据失败
completionHandler(UIBackgroundFetchResultNewData); }

  

  本地通知 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

  下面是代码实现:

 // 创建本地通知对象
UILocalNotification *noti = [[UILocalNotification alloc] init]; // 指定通知发送的时间10s
noti.fireDate = [NSDate dateWithTimeIntervalSinceNow:10.0f];
// 指定时区
noti.timeZone = [NSTimeZone defaultTimeZone];
// 指定通知内容
noti.alertBody = @"这是通知的内容"; // 设置通知重复的周期(1分钟)
noti.repeatInterval = NSCalendarUnitSecond; // 指定锁屏界面的信息
noti.alertAction = @"这是锁屏界面的信息"; // 设置点击通知进入程序时候的启动图片
noti.alertLaunchImage = @"xxx"; // 收到通知播放的音乐
noti.soundName = @"hehe.wav"; // 设置应用程序的提醒图标
noti.applicationIconBadgeNumber = ; // 注册通知时可以指定将来点击通知之后需要传递的数据
noti.userInfo = @{@"dogName":@"xx1",
@"weight":@()
}; // 注册添加通知
UIApplication *app = [UIApplication sharedApplication];
[app scheduleLocalNotification:noti];

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

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

  

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

  1. iOS监听模式系列之本地通知Notification

    本地通知 本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时.待办事项提醒,又或者一个应用在一段时候后不使用通常会提示用户使用此应用等都是本地通知.创建一个本地通知通常分为以下几 ...

  2. 如何在 iOS 8 中使用 Swift 实现本地通知(上)

    当你的应用在后台运行时,可以简单地使用本地通知把信息呈现给用户.它可以允许你显示 提醒.播放提示音和数字角标(badge).本地通知可以被以下的事件触发:计划好的时间点或者用户进入和离开某个地理区域. ...

  3. 如何在 iOS 8 中使用 Swift 实现本地通知(下)

    在上集中,我们已经构建了一个简单的待办列表应用(to-do list app),这个应用可以在待办项过期时通过本地通知提醒用户.现在,我们要在之前的基础上添加以下功能:应用图标角标上显示过期待办项的数 ...

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

    本地通知与远程通知详解 一:本地通知   Local Notification的作用 Local Notification(本地通知) :是根据本机状态做出的通知行为,因此,凡是仅需依赖本机状态即可判 ...

  5. ios推送:本地通知UILocalNotification

    Notification是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iOS下应用分为两种不同的Notificati ...

  6. iOS开发中UILocalNotification本地通知实现简单的提醒功能

    这段时间项目要求做一个类似的闹钟提醒功能,对通知不太熟悉的我,决定先用到xcode自带的本地通知试试,最终成功的实现了功能,特整理分享下. 它的表现特点: app关闭的时候也能接收和显示通知. app ...

  7. iOS: 本地通知的前后变化(iOS10)

    一.介绍  通知和推送是应用程序中很重要的组成部分.本地通知可以为应用程序注册一些定时任务,例如闹钟.定时提醒等.远程推送则更强大,提供了一种通过服务端主动推送消息到客户端的方式,服务端可以更加灵活地 ...

  8. IOS 本地通知推送消息

    在现在的移动设备中,好多应用性的APP都用到了推送服务,但是有好多推送的内容,比如有的只是单纯的进行推送一个闹钟类型的,起了提醒作 用,有的则是推送的实质性的内容,这就分为推送的内容来区别用什么推送, ...

  9. iOS APP 在前台时弹出本地通知

    iOS10 之后使用才有效果 1.在 AppDelegate.m 文件里面添加下面的方法. - (void)userNotificationCenter:(UNUserNotificationCent ...

随机推荐

  1. [转]jQuery: get table column/row index remove table column (by column number)

    本文转自:http://www.xinotes.org/notes/note/1087/ <!DOCTYPE html><html><head> <title ...

  2. (转)Rsync 排错案例解析

    Rsync 排错案例解析 原文:http://blog.51cto.com/irow10/1827306 错误一. 执行计划任务的备份脚本后没有看到备份的文件 1.首先查看crontab日志是否执行文 ...

  3. pat1090. Highest Price in Supply Chain (25)

    1090. Highest Price in Supply Chain (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 C ...

  4. csdn下载

    按次收费: http://www.itziy.com/

  5. intellijidea课程 intellijidea神器使用技巧 3-3 postfix

    Ctrl shift A ==> postfix completion 调出postfix 方法体中   ==> for   100.fori    ==>enter for循环10 ...

  6. vue2 数据交互 vue-resource

    1.安装vue-resource到项目中,找到当前项目 输入:npm install vue-resource --save 2.安装完毕后,在main.js中导入,如下所示: import  Vue ...

  7. APK加固之类抽取分析与修复

    0x00 简单介绍   目前我己知的APK加固主要有以下两种方式(或有其它的方式有待发现) 隐藏dex文件:通过对目标DEX文件进行整体加密或压缩方式把整个dex转换为另外一个文件存放在assets文 ...

  8. Build 2017 | 今儿来说说火得不行的认知服务吧(内附微软开发者大会在线峰会报名地址)

    Everybody,新一期的 Build 2017 大会新技术详谈又来了,今天小编给大家带来了一个既智能又有趣的技术,你一定喜欢!不卖关子了,直奔我们本期的主题: [只需几行代码,就能让任何应用更智能 ...

  9. day002-List类、泛型

    1. 集合 集合是容器,可以存储任意类型的数据,集合的长度可变. 1.1 集合和数组的比较 1.2 集合分类 单列集合:每次存储时,存储一个元素(Collection),包括:list.set 双列集 ...

  10. canvas 绘制八卦图

    绘制要点: 1.getContext('2d'); -->绘图环境,2维空间 2.fillRect(x,y,w,h); -->矩形:实心(黑色背景) 3.strokeRect(x,y,w, ...