ios10通知怎么划上去

iOS 10推送通知开发
招聘信息:
原文地址:,译者:虽然通知经常被过度使用,但是通知确实是一种获得用户关注和通知他们需要更新或行动的有效方式。iOS 10有了新的通知,如新消息、商业信息和时间表的变化。在本教程中,我将向你展示如何使用通知在你的iOS应用程序,并且显示iOS 10引入了新特性。开发iOS 10推送通知你需要最新版本的Xcode,Xcode 8测试版,这些目前都是可下载的,在。你可以去下载本教程的整个工程。开始在Xcode中启用推送通知是很容易的,但你需要几个步骤。创建一个新的工程,给它起一个唯一的Bundle Identifier.当您已经创建了project,去Project Settings页选择Capabilities栏。打开推送通知,如下所示。注意: 如果你是苹果的付费开发者成员,你就能看到推送通知功能这一栏。去Developer Account这一栏,从左侧的菜单栏中选择证书,IDs,和描述文件,然后选择App IDs在Identifiers栏中。找到已经创建的App的名称,在服务列表中选中。注意,有两个可配置状态的推送通知。不要关闭这个网页,你很快就会回来的。发送通知在本文中,我将使用Pusher发送推送通知。您还可以使用其他的解决方案如Houston。无论哪种方式,发送一个通知,你都需要一个证书。去创建一个证书,打开Keychain Access,从证书认证菜单中选择Keychain Access -> Certificate Assistant -> Request a Certificate。填写表单并单击Continue。确保你选择保存到了磁盘。返回到开发者账户的网页。你可以为你的App IDs生成开发(调试)证书或发布证书。之后在选择右侧的申请,在底部,单击编辑。在推送通知部分,单击创建开发(调试)证书。在需要时,从Keychain,继续上传生成证书请求。现在你已经创建了证书,可以下载它。打开下载的文件安装它。下载并运行Pusher。这个程序的顶部需要填入一个推送的证书。为它位于你的钥匙链,OS X将询问是否允许Pusher访问证书。第二个字段需要device token,你会在下一步中得打它。收到通知是时候敲代码了。收到通知的设备必须注册到苹果推送通知服务(APNS)。在应用启动的时候你要发送一个唯一的token。打开AppDelegate.swift然后添加如下方法。注意:该代码是基于Swift3.0。语法可能看起来不同于你之前使用过的。func&registerPushNotifications()&{
&&DispatchQueue.main.async&{
&&&&let&settings&=&UIUserNotificationSettings(types:&[.badge,&.sound,&.alert],&categories:&nil)
&&&&UIApplication.shared().registerUserNotificationSettings(settings)
}我之后会解释,在这个设置中你会收到指定的通知类型。调用这个方法在应用程序启动的的文件里。func&application(_&application:&UIApplication,&didFinishLaunchingWithOptions&launchOptions:&[NSObject:&AnyObject]?)&->&Bool&{
&&registerPushNotifications()
&&return&true
}此时,应用程序将自动弹出一个Alert,询问用户是否要收到该通知。通知必须被注册,才能发送,而是否接受通知则需要用户批准。UIApplicationDelegate方法处理响应。func&application(_&application:&UIApplication,&didRegister&notificationSettings:&UIUserNotificationSettings)&{
&&if&notificationSettings.types&!=&UIUserNotificationType()&{
&&&&application.registerForRemoteNotifications()
}首先检查用户授予权限,然后调用该方法注册远程通知。当请求完成后者将调用另一个代理方法。这个方法响应包含一个device token,你可以打印进行调试。在发送推送通知来识别设备需要这个device token。如果出现错误,调用下面的方法。func&application(_&application:&UIApplication,&didFailToRegisterForRemoteNotificationsWithError&error:&NSError)&{
&&print("Registration&failed!")
}注意:重要的是在应用程序启动时要调用registerUserNotificationSettings,因为用户可以改变权限的设置。同样registerForRemoteNotifications也是很重要的,因为有些场景device token可以改变那么通知将不再发送。到目前为止,这足以让你收到一个简单的通知。通知内容通过不同的通知内容,有不同的方式来使一个App来收到不同类型的通知,这些通知内容包括应用程序通知用户的信息,或者用户自定义的信息。给用户发送通知,使用JSON格式,这个格式本身包含一个字典,对应aps的key。在这第二个字典你指定载内容和key。最常见的是:向用户显示的通知消息。这是一个简单的字符串,或一个字典key和标题一样,正文等等。接收到通知的声音。它可以是一个定制的声音,或一个系统的声音。应用图标右上角的角标个数。将其设置为0,消除角标。有效的内容。使用值1发送一个无声的通知给用户。它不会播放任何声音,或任何角标设置,但是当通知被唤醒,应用将与服务器进行沟通。本教程的一个简单的通知内容:{
&&"aps":&{
&&&&"alert":&{
&&&&&&"title":"Hello!&:)",
&&&&&&"body":"App&closed..."
&&&&"badge":1,
&&&&"sound":"default"
}应用程序的生命周期拷贝device token粘贴在Pusher的token部分,拷贝这个JSON对象在Pusherd的payload部分。试着发送第一个通知。如果设备的屏幕被锁定,它将看起来如下,但什么都不会发生,当用户点击了这个通知视图。接受通知,你需要添加新的方法:private&func&getAlert(notification:&[NSObject:AnyObject])&->&(String,&String)&{
&&let&aps&=&notification["aps"]&as?&[String:AnyObject]
&&let&alert&=&aps?["alert"]&as?&[String:AnyObject]
&&let&title&=&alert?["title"]&as?&String
&&let&body&=&alert?["body"]&as?&String
&&return&(title&??&"-",&body&??&"-")
}这将返回收到的通知标题和正文,如果结构是相同的。func&notificationReceived(notification:&[NSObject:AnyObject])&{
&&let&viewController&=&window?.rootViewController
&&let&view&=&viewController&as?&ViewController
&&view?.addNotification(
&&&&title:&getAlert(notification:&notification).0,
&&&&body:&getAlert(notification:&notification).1)
}这个方法将在应用程序主要视图UITableView内添加一行(参见ViewController的完整项目代码)。我测试了三个案例的推送通知:当应用关闭时如果用户打开应用程序的通知,调用didFinishLaunchingWithOptions方法更新,如下:func&application(_&application:&UIApplication,&didFinishLaunchingWithOptions&launchOptions:&[NSObject:&AnyObject]?)&->&Bool&{
&&//&Override&point&for&customization&after&application&launch.
&&application.applicationIconBadgeNumber&=&0;&//&Clear&badge&when&app&launches
&&//&Check&if&launched&from&notification
&&if&let&notification&=&launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey]&as?&[String:&AnyObject]&{
&&&&window?.rootViewController?.present(ViewController(),&animated:&true,&completion:&nil)
&&&&notificationReceived(notification:&notification)
&&&&}&else&{
&&&&&&registerPushNotifications()
&&&&return&true
&&}假设用户已经看过了这个通知,那么角标就被清除了。然后,检查应用程序是从图标打开还是通过通知打开的。在第一种情况下,调用registerPushNotifications()方法然后继续之前的流程。如果应用是通过打开通知的方式运行,则调用自定义notificationReceived方法来添加行。当应用运行在前台时如果用户正在使用应用程序,这意味着应用程序在前台,接受通知的方法如下。在这个通知的方法中加入对tableView的处理:func&application(_&application:&UIApplication,&didReceiveRemoteNotification&userInfo:&[NSObject&:&AnyObject])&{
&&notificationReceived(notification:&userInfo)
}注意:在这种情况下,通知将不会发出声音。当应用运行在后台时在这种情况下,我添加了一个方法来清除角标数目。通知的处理和应用程序在前台的处理是一样的。func&applicationWillEnterForeground(_&application:&UIApplication)&{
&&application.applicationIconBadgeNumber&=&0;&//&Clear&badge&when&app&is&or&resumed
}最后,这个列表中有三行来自通知的内容。最后随着iOS 10的通知,开发者有了更多比之前有趣的机会和不曾有的交互权限。我希望本教程中关于如何使用通知能帮助你更好的理解通知是如何工作的。
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量6646点击量5944点击量4816点击量4543点击量3285点击量3068点击量2796点击量2552点击量2519
&2016 Chukong Technologies,Inc.
京公网安备89您现在的位置是:>>> 如何在iOS 10上玩出新意?关注这10个功能
如何在iOS 10上玩出新意?关注这10个功能
时间: 10:20
编辑:组装电脑网
围观次数:
& iPhone 7已经上市很多天了,我们在使用时候其实更多的也是在享受最新系统带来的便利性,ios10系统带来了不少变化,比如:更牛的通知栏、更智能的Siri、更清晰的照片、等等。
& 根据最新的数据,ios10正式版只出了两个多星期,升级率达到了差不多50%,是现在使用率最高的版本,那么新系统到底有什么新功能,能让那么多人去升级?除非新鲜感感,更重要的是实用性,今天给大家介绍一下这些新功能。
1.添加经常使用的软件到快捷栏
& ios10上多了一个任务栏,在锁屏界面右变滑、桌面菜单滑到最左变、下拉通知栏都可以看到,也就是说不管你手机在什么状态下都可以看到这个界面。
& 因为这个任务栏,让我们使用iPhone的时候大大提升了效率,由于它支持自定义APP和功能,因此我们常用的软件放到这个任务栏上。
& 比如扫一扫,添加备忘录,之类的快捷方式都可以添加上去。
2.用Siri使用滴滴打车
& ios10的开放前相比以前确实好很多,我们可以用上更多的功能,比如Siri+滴滴打车,在设置中将最新版的滴滴出行授权到Siri后,我们就可以使用Siri叫车,在某些方面,使用Siri叫车确实方便很多,日后会有更多的第三方应用支持该功能,Siri+APP将带来更多便捷实用性。
3.安装电话拦截APP:来电防骚扰
& ios10开放电话权限后很好的降低了使用者接到垃圾电话的概率,通过第三方APP的配合,可以过滤大部分垃圾电话,还你一个安静的生活,目前支持这个功能的软件有:360助手、腾讯手机管家、触宝电话等,使用上非常简单,下载应用后授权到&电话&中就可以让手机拥有来电防骚扰的功能。
4.利用相册智能分类快速查找你想要的照片
& 相册的照片多了以后,寻找某一张照片变成了一件很困难的事,ios10的相册利用了人工智能技术,可以识别人像然后归类,通过这个功能可以很多找到自己或者家人朋友的照片,相册还可以按照不同的拍摄地点在&地图&上标注不同的照片,通过此也可以帮助用户快速定位照片,另外&回忆&菜单会对旅行这样的&回忆&照片进行归类,用户随时可以利用这个功能找到对应的照片。
5.色彩滤镜:调节你想要的屏幕颜色
& 在辅助功能的显示调节中多了一个&色彩滤镜&功能,这个功能主要给色盲症状的用户使用,另外还有一个功能就是可以线性调节屏幕的色彩,如果你觉得屏幕偏暗或者偏亮,可以通过这个功能调节到最适合自己喜欢的色彩。
& 通过该功能可以开启屏幕灰度显示,就是将屏幕改变成黑白画面。将这个功能设置成辅助功能快捷键后,在解锁状态下三击Home键即就可以开启,在手机准备没电的时候,使用这个功能可以让电池使用时间变长。
6.开启减弱动态效果,提高手机运行速度
& ios10支持iPhone 5以上的手机,新系统在老手机上使用前来经常会变卡,如果你想让手机顺畅,可以在&设置-辅助功能-减弱动态效果&上卡开启减弱动态效果功能,就可以很好的提升手机的运行速度了。
7.利用闹钟的&就寝&功能提高睡眠质量
& ios10系统自带的闹钟应用多了&就寝&功能,通过这个功能用户可以设置自身的睡眠计划,如设置就寝时间和起床时间,系统会自动计算出用户总睡眠时间,同时还有就寝提醒和闹铃功能,还能对用户的睡眠时间进行统计和分析,通过数据的反馈,用户可以根据自己的条件计划睡眠,提高睡眠质量。
8.放大镜功能
& ios10的辅助功能中新增了&放大器&功能,利用手机摄像头充当数码放大镜,可以调节放大倍数等等,比起&相机&的拍照功能,更加专注于&放大&,所以通过这个功能,在某些时候你就再也不需要去找放大镜了。
9.强迫症患者福音:删除不喜欢又碍眼的APP
& 为了让桌面保持干净,老系统上附带的一些垃圾软件我们基本都会建一个文件夹把它们装在里面,对于强迫症患者来说,这个文件夹看起来还是很碍眼,而ios10支持一些系统自带应用的移除,这些用并没有真的删除掉,只是被隐藏起来,虽然有点感觉是在骗自己,最起码眼不见为净。
10.一键清理通知信息
& 开启了太多消息推送,通知栏上经常都是各式各样的推送内容,很多时候这些消息看不完又想要清除掉只能手动一条一条清理痛苦,ios10上新增了通知栏一键清楚功能,只要点击通知栏右上角的交叉图标,立刻可以清理掉多余的信息,马上通知栏恢复干净。
& ios10相比上一代进行了不少改进,开放了很多权限让很多第三方APP参与了进来,人工智能技术的支持使相册这些应用也变得更加灵活,用户使用起来更加便捷,在ios10上还有很多好玩实用的功能待我们去发现。
关注装机之家微信公众账号:(wwwlotpccom)一个关注电脑、手机、科技的订阅号冒险体验iOS 10一天后 我发现这些功能不太方便
稿源:威锋网
iOS 10应该是自iOS 7以来最为惊艳的一个版本,许多地方都进行了重新设计,也增加了许多人性化功能。全新的锁屏界面、通知中心、控制中心以及炫酷的iMessage、更加强 大的Siri等等,锋观点的编辑同学们也没能经住诱惑,冒着&变砖&、&黑屏&的风险更新了iOS 10。目前苹果放出了iOS 10 Developer Beta 1,也就是开发者预览版,你可以通过安装认证文件(iPhone点击该链接,并用&Safari&浏览器打开),重启之后就能更新了。
需要声明的是,升级有风险!升级有风险!升级有风险!(重要的事情说三遍)
升级途中如果网络断开,可能会出现&变砖&的情况。另外,由于还处于开发者预览版,升级后也可能出现黑屏重启的情况,本人在更新一天后,就出现了不下10次的黑屏。不过,第三方App兼容性还算好,微信、微博、支付宝等主流第三方应用都能正常使用,但偶尔也会出现闪退的情况。
因此,建议你不要拿自己的主力机升级,要升级事先也要进行备份。
本人升级的手机型号为国行版iPhone&6&Plus,由于没有3D&Touch功能,所以无法完整地体验到iOS&10的所有功能。如果你想看详细的体验文,可以移步到这里《iOS&10功能初体验:iOS&7后迎来的最大升级》。而今天我要和大家分享的是,在一天的使用体验中觉得iOS&10不太方便的地方。
首先是亮屏仍需按Home键才能解锁。
iOS 10在亮屏及解锁上有了较大的改变,拿起手机便会自动亮屏(仅对iPhone&6s、6s&Plus、SE机型有效),另外也将原来一直在用的滑动解锁改成了按压Home键来解锁。但这带来的问题是,原来iPhone在亮屏的情况下,直接将手指放在Touch&ID上无需按压Home键即可解锁。而现在即使是拿起手机亮屏之后,仍需按一下Home才能解锁(可以看到,亮屏状态时,将手指放在Touch&ID上会显示&按压主屏幕按键来打开&),这种体验与用户之前的习惯性体验不同,让人一时难以适应。
之前我是通过按压电源键或Home键进行亮屏,然后用手指触摸Touch&ID便可进行解锁。现在我不但需要按压电源键或Home键进行亮屏,还要再按压一次Home键进行解锁(按住Home键不离开可直接解锁,但这跳过了亮屏的过程,直接进入了主屏),这种体验显然是不太好的。
原本拿起手机便亮屏是一个非常好的功能,但在已经亮屏的情况下,解锁还要按一下Home键,这显然让操作更加繁琐了。当然目前iOS&10还处在开发者版本,苹果也可能会改善这个问题。
第二个不太方便的地方是通知中心改变了,使用插件不方便了。
iOS&10另一个较大的改变对通知中心和扩展插件进行了重新设计。锁屏界面直接右划显示扩展,这对大屏手机来说更加方便。但在主屏界面,通知中心和扩展插件被分开了,默认从顶端下拉仅显示通知,而扩展插件是通过右划显示。只有在打开应用的情况下,下拉通知中心,才能右划切换到扩展。也就是说,当你在主屏任何一个页面时,下拉通知中心都是没有切换到扩展的操作,只有通知中心。而之前,无论在什么状态下都可以快速切换使用扩展。
第三个是控制中心切换不方便了。
iOS&10的一大亮点是大量采用了圆角矩形的卡片式设计,这能够更好地显示信息,在整体风格上也更加统一了,但在操作上的便利性上却大打折扣了。
iOS&10的控制中心将音乐播放界面单独分离了出来,在控制中心左右滑动即可在主界面和音乐之间切换。这带来的好处是音乐界面更加漂亮了,整个界面就像一张精致的小卡片。但问题是,这将原来简单的操作变得更复杂了,原来可以在控制中心直接暂停、切换音乐,而现在你必须左滑才能操作音乐。虽然默认再次上拉控制中心是显示上次的界面,但如果上拉显示是音乐界面,而这次你要打开wifi、蓝牙或计算器,就必须再右滑切换。而原来在一个界面就可完成,不必切换。
当然,以上几个方面只是iOS&10在重新设计时,所带来的相对于iOS&9的不便之处,但整体上iOS&10还是值得体验的,尤其是卡片式设计的加入使得整个界面在布局上更加统一了。
经历了近10个年头,iOS在大版本数上终于迈进了两位数,经过这10个大版本的更新后,这款移动操作系统在易用性、稳定性、安全性、成熟度等方面都已经达到了非常出色的水平,这是其它移动操作系统所不能及的。
有好的文章希望站长之家帮助分享推广,猛戳这里
本网页浏览已超过3分钟,点击关闭或灰色背景,即可回到网页iOS10 推送通知 UserNotifications - 简书
iOS10 推送通知 UserNotifications
iOS10新增了UserNotificationKit框架,整合了关于通知的方法。增加了很多新特性:
1. 推送内容更加丰富
由之前的alert到现在的title、subtitle、body。
为推送增加了附近,包括符合格式和大小的图片、音频、视频。
2. 方便的对推送的周期进行管理
#import &UserNotifications/UserNotifications.h&
通过UNNotificationCenter来管理本地和远程通知,包括本地通知和远程通知。
//iOS8以下
[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound];
//iOS8 - iOS10
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:nil]];
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionA
[center requestAuthorizationWithOptions:options completionHandler:^(BOOL granted, NSError * _Nullable error) {
获取用户设置
iOS10 提供了获取用户授权相关设置信息的接口getNotificationSettingsWithCompletionHandler: , 回调带有一个UNNotificationSettings对象,它具有以下属性,可以准确获取各种授权信息
authorizationStatus
soundSetting
badgeSetting
alertSetting
notificationCenterSetting
lockScreenSetting
carPlaySetting
alertStyle
注册APNS,获取deviceToken
iOS10, 注册APNS和获取deviceToken的方法还和之前一样
[[UIApplication sharedApplication] registerForRemoteNotifications];
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
本地推送流程
设置推送内容
设置通知触发器
1. 设置推送内容
attachments
//数字标志
//推送内容标题
//推送内容子标题
//推送内容body
categoryIdentifier
//category标识,操作策略
launchImageName
//点击通知进入应用的启动图
//附带通知内容
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = @"title";
content.subtitle = @"subtitle";
content.body = @"Copyright (C) 2016年 Hong. All rights reserved.";
content.sound = [UNNotificationSound soundNamed:@"test.caf"];
2. 设置通知触发器
有4种触发器:
UNPushNotificationTrigger 触发APNS服务,系统自动设置(这是区分本地通知和远程通知的标识)
UNTimeIntervalNotificationTrigger 一段时间后触发
UNCalendarNotificationTrigger 指定日期触发
UNLocationNotificationTrigger 根据位置触发,支持进入某地或者离开某地或者都有
//5秒后触发
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];
//每周三,13点触发
NSDateComponents *components = [[NSDateComponents alloc] init];
components.weekday = 4; //周三
components.hour = 13; //13点
UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:YES];
//这个点,100米范围内,进入触发。
CLLocationCoordinate2D cen = CLLocationCoordinate2DMake(39..333386);
CLRegion *region = [[CLCircularRegion alloc] initWithCenter:cen radius:100 identifier:@"center"];
region.notifyOnEntry = YES;
region.notifyOnExit = NO;
UNLocationNotificationTrigger *trigger = [UNLocationNotificationTrigger triggerWithRegion:region repeats:YES];
3. 添加通知
需要先创建request,给request设置content和trigger,再添加到center。
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"request" content:content trigger:trigger];
[[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
NSLog(@"添加指定位置推送 :%@", error ? [NSString stringWithFormat:@"error : %@", error] : @"success");
4. 管理通知
iOS10的推送都是通过center进行管理的。通过request的identifier,进行通知的查找、更新、删除。这个标识是用来区分这个通知和其他通知的。
更新:center 的 addNotificationRequest:withCompletionHandler: 方法在 id 不变的情况下重新添加,就可以刷新原有的推送。
removePendingNotificationRequestsWithIdentifiers:
//删除特定等待递送的通知
removeAllPendingNotificationRequests
//删除所有等待递送的通知
removeDeliveredNotificationsWithIdentifiers:
//删除特定已经递送的通知
removeAllDeliveredNotifications
//删除已经递送的通知
getPendingNotificationRequestsWithCompletionHandler:
//获取所有等待递送的通知
getDeliveredNotificationsWithCompletionHandler:
//获取所有已经递送的通知
远程推送流程
注册推送,获取deviceToken
收到普通推送
收到后台推送
收到静默推送
1. 注册推送,获取deviceToken
在AppDelegate的application:didRegisterForRemoteNotificationsWithDeviceToken:里获取注册成功的deviceToken
2. 收到普通推送
//iOS10 之前
"alert" : "title",
"badge" : 1,
"sound":"default"
//iOS10 新增的文案多样性
"alert" : {
"title" : "title",
"subtitle" : "subtitle",
"body" : "Copyright (C) 2016年 Hong. All rights reserved."
"badge" : 1,
"sound":"default"
3. 收到后台推送
iOS7以后要想在后台做一些操作,需要在APNS增加字段:"content-available":1。并且在Background Modes中增加Remote notifications。
"alert":"Testing.. (34)",
"badge":1,
"sound":"default",
"content-available":1
要修改Background Modes, 可以修改info.plist中UIBackgroundModes字段, 或者在项目Target-&Capabilities-&Background Modes里面将Remote notifications选中。
![backgroundmodes-1.jpeg](
backgroundmodes-2.jpeg
4e5c186.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
后台推送的回调,会调用AppDelegate的application:didReceiveRemoteNotification:fetchCompletionHandler:方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler
[[DownloadManager sharedInstance] setCompletionBlock:^(BOOL finish, BOOL stop) {
NSLog(@"completionblock");
//后台处理完成
completionHandler(UIBackgroundFetchResultNewData);
[[DownloadManager sharedInstance] start];
更多后台处理可以看
4. 收到静默推送
APNS去掉alert、badge、sound字段实现静默推送,增加增加字段:"content-available":1,也可以在后台做一些事情。
"content-available":1
5. 管理通知
通过新的字段 apns-collapse-id
通知策略(Category+Action)
action:设置标识(identifier)、按钮标题(title)、按钮选项(options)
+ (instancetype)actionWithIdentifier:(NSString *)identifier title:(NSString *)title options:(UNNotificationActionOptions)
UNNotificationActionOptionAuthenticationRequired
执行前需要解锁确认
UNNotificationActionOptionDestructive
显示高亮(红色)
UNNotificationActionOptionForeground
将会引起程序启动到前台
action 有2种类型:
UNNotificationAction 普通按钮样式
UNTextInputNotificationAction 输入框样式
category:设置标识(identifier)、actions、intentIdentifiers(需要填写你想要添加到哪个推送消息的 id)、策略选项(options)
+ (instancetype)categoryWithIdentifier:(NSString *)identifier actions:(NSArray&UNNotificationAction *& *)actions intentIdentifiers:(NSArray&NSString *& *)intentIdentifiers options:(UNNotificationCategoryOptions)
UNNotificationCategoryOptionNone
UNNotificationCategoryOptionCustomDismissAction
当清除当前通知时,会走center的delegate。
UNNotificationCategoryOptionAllowInCarPlay
适用于行车模式
UNNotificationAction *action1 = [UNNotificationAction actionWithIdentifier:@"action1" title:@"需要解锁" options:UNNotificationActionOptionAuthenticationRequired];
UNNotificationAction *action2 = [UNNotificationAction actionWithIdentifier:@"action2" title:@"启动app" options:UNNotificationActionOptionForeground];
//给category设置action
UNNotificationCategory *category1 = [UNNotificationCategory categoryWithIdentifier:@"category1" actions:@[action1, action2] intentIdentifiers:@[] options:UNNotificationCategoryOptionNone];
//给通知内容设置category
content.categoryIdentifier = @"category1";
本地推送通知增加附件,只需给content.attachments设置UNNotificationAttachment附件对象
远程推送通知增加附件,需要实现 UNNotificationServiceExtension(通知服务扩展),在回调方法中处理 推送内容时设置 request.content.attachments(请求内容的附件) 属性,之后调用 contentHandler 方法即可。
给本地推送通知增加附件
NSString *path = [[NSBundle mainBundle] pathForResource:@"IMG_0723" ofType:@"mp4"];
UNNotificationAttachment *attachment = [UNNotificationAttachment attachmentWithIdentifier:@"atta1" URL:[NSURL fileURLWithPath:path] options:nil error:&error];
content.attachments = @[attachment];
1. UNUserNotificationCenterDelegate
通知将要显示的回调方法:应用在前台,收到通知时触发。
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
//如果需要在应用在前台也展示通知
completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);
操作的回调方法:不管应用在前台、后台还是被手动划掉,下面三种情况将触发该方法:
点击通知进入应用
点击action
清除了category是UNNotificationCategoryOptionCustomDismissAction的通知。
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler
completionHandler();
2. UIApplicationDelegate
收到远程推送的回调方法:APNS带有"content-available":1字段,并且应用在前台或者后台时收到远程推送,将触发该方法。(注意:应用被手动划掉将无法触发)
可以在这个方法里做一些后台操作(下载数据,更新UI等),记得修改Background Modes。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler
completionHandler(UIBackgroundFetchResultNewData);
问题: 应用在后台,收到本地通知的回调方法暂时未知。
UNNotificationContentExtension - 通知内容扩展
通知内容扩展需要新建一个 UNNotificationContentExtension Target,之后只需在 viewcontroller 的中实现相应的接口,即可以对 app 的通知页面进行自定义扩展,扩展主要用于自定义 UI。
UNNotificationServiceExtension - 通知服务扩展
unnotification-content-extension.jpg
UNNotificationServiceExtension 提供在远程推送将要被 push 出来前,处理推送显示内容的机会。此时可以对通知的 request.content 进行内容添加,如添加附件,userInfo 等。
通过远程推送的通知也支持 UNNotificationContentExtension,只需将 content.categoryIdentifier (通知内容类型标示) 的值设置为已经添加到 UNNotificationContentExtension plist 中的值即可。
使用UNNotificationServiceExtension,你有30秒的时间处理这个通知,可以同步下载图像和视频到本地,然后包装为一个UNNotificationAttachment扔给通知,这样就能展示用服务器获取的图像或者视频了。这里需要注意:如果数据处理失败,超时,extension会报一个崩溃信息,但是通知会用默认的形式展示出来,app不会崩溃。
本文是根据iOS10推送通知的新框架, 将本地、远程推送的完整流程写了一遍。对于UNNotificationContentExtension(通知内容扩展)和 UNNotificationServiceExtension(通知服务扩展)这两块,将会另起篇幅详细描述。
关于通知的两个扩展,
更多代码实现请查看, 如发现问题,请帮忙指正。
如果想了解iOS10之前的推送,
如果想了解更多有关后台下载的知识,
iOS开发工程师
GitHub:https://github.com/liuyanhongwl
WWDC session - Notifications 学习总结,如有不妥之处,望请指正?? 先给一些用得着的链接:session 707 Introduction to Notifications--2016session 708 Advanced Notificati...
介绍一下iOS10的通知新功能,用户体验的提升和开发者能够发挥的地方非常多,使得iOS更具有竞争力。 1.iOS 10通知系统支持Images, GIFs, Audio and Video类型 2.iOS 10推出Notification Service Extension...
本文篇幅较长,元旦后将重新排版梳理行文,交流是一件非常有价值的事情~ iOS里的通知与推送 技术文章 #待完善 “推送有什么好讲的????”---敲黑板 通知和推送是一种东西么? 图1为通知,图2为推送也许有些同学现在才恍然大悟,今天我们就聊聊这个通知和推送吧。 什么叫通知...
极光推送: 1.JPush当前版本是1.8.2,其SDK的开发除了正常的功能完善和扩展外也紧随苹果官方的步伐,SDK在iOS8刚推出的时候跟进更新。在一定程度上来讲,能够体现极光推送的技术力量是比较强大的; 2.应用内消息提高了推送服务的及时性和可靠性,在、紧随当下追求应用...
本文发布在:iOS10 推送通知详解(UserNotifications) iOS10新增加了一个UserNotificationKit(用户通知框架)来整合通知相关的API,UserNotificationKit框架增加了很多令人惊喜的特性: 更加丰富的推送内容:现在可以...
图片来源于《小王子》插画 文字by查查原创 _________________________________ 上个星期去宜家,逛完之后在一楼卖小吃的地方喝东西,旁边是一位黑人女孩,我正喝着饮料,突然看见女孩一个大跨步走出来,再顺着她走过去的视线看,一个中年妇女边放下举起的...
清明是什么?风清景明,慎终追远,这是一个悲怆的节日。清明是什么?放歌踏青,追逐春天,这是一个轻盈的节令。
不携香火,寻一条幽幽小径。小径上铺满了前一个夏日的锦绣,不舍离去,似乎在追忆些什么;两旁的枝干皆抽出浅浅的嫩叶,生命正蓬勃生长。小径上不见人影,但我听得枯叶...
一,愿意把自己的智慧和财富与整个宇宙共同分享,与所有的业力伙伴共享。因为我所创造的强烈铭印能帮助到所有的业力伙伴,简单,容易,轻松,快速的梦想成真,获得健康自由,财富自由,和生命自由。二,与大家分享财富,一个红包,一句祝福,智慧的分享更重要。三,带着高度的觉知,给自己做最好...
今天看了莫言《粮食》一文,讲三年困难时期,公共食堂吃不饱,家里连野菜也採不到了。男人和大脚女人出集体工,小脚女人则到队里去磨面,只要监工反一下眼,她们就抓一把麦子或玉米等放口里含着或衣袋里藏着,回到家里再拿出来给...

我要回帖

 

随机推荐