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. inventor怎样卸载干净

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  2. (转)AIX下的MPIO、RDAC、SDDPCM多路径软件操作 (AIX下的MPIO,查看AIX下hdisk与盘柜卷lun的对应关系)

    AIX下的MPIO.RDAC.SDDPCM多路径软件操作 (AIX下的MPIO,查看AIX下hdisk与盘柜卷lun的对应关系) 原文:http://blog.163.com/huangbao_007 ...

  3. (转)ping命令

    ping命令 原文:https://www.cnblogs.com/peida/archive/2013/03/06/2945407.html Linux系统的ping命令是常用的网络命令,它通常用来 ...

  4. CentOS下NFS服务器配置教程

    说明: NFS服务器: 操作系统:CentOS 5.5 IP:192.168.21.160 nfs网络文件服务器共享目录:/data/osyunwei 目录所有者:www(说明:www为nginx运行 ...

  5. 打乱式排序的Java版实现

    项目中涉及到对大批量的数据进行打乱式排序,大概原理如下: 输入源数据:1,1,2,3,3,3,4,4 输出结果:   1,2,3,4,1,3,4,3 实现代码如下,采用递归的思想: static &l ...

  6. SQL Server 2008 报错:已成功与服务器建立连接,但是在登录前的握手期间发生错误

    今天SqlServer 2008连接数据库时报错:已成功与服务器建立连接,但是在登录前的握手期间发生错误.在连接到 SQL Server 2008 时,在默认的设置下 SQL Server 不允许远程 ...

  7. 在使用angular和swiper插件中的一些问题

    在使用angular获取swiper图片的时候swiper就不会轮播. 解决方法: 1.使用计时器的方法,不是最优 settimeOut(function(){ mySwiper = new Swip ...

  8. 【起航计划 029】2015 起航计划 Android APIDemo的魔鬼步伐 28 App->Preferences->Default Values 偏好默认值

    DefaultValues 介绍了如何在XML中定义Preference的缺省值. <CheckBoxPreference android:key="default_checkbox& ...

  9. python socket练习

    服务器端 #服务器端 import socket server = socket.socket() server.bind(('localhost',6969))#绑定要监听的端口 server.li ...

  10. 笨办法学Python(二)

    习题 2: 注释和井号 程序里的注释是很重要的.它们可以用自然语言告诉你某段代码的功能是什么.在你想要临时移除一段代码时,你还可以用注解的方式将这段代码临时禁用.接下来的练习将让你学会注释: #-- ...