热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS10通知及通知拓展Extension使用详解

1.1-iOS10拓展简介iOS10系统最大的一个亮点就是增加了系统应用的拓展功能ExtensionExtension功能可以理解为自定义系统界面1.2-iOS10通知使用iOS1

 

1.1-iOS10拓展简介


  • iOS10系统最大的一个亮点就是增加了系统应用的拓展功能Extension

    • Extension功能可以理解为自定义系统界面

这里写图片描述

 

1.2-iOS10通知使用


  • iOS10之后,为了对自定义通知界面拓展Notification Content的支持,iOS系统推出了新的框架

    • 通知的使用思路和步骤不变,只是API发生了变化,并且系统全部会有提示,我们只需要根据系统提示修改一下即可
  • 1.请求授权及添加分类

#import "AppDelegate.h"//iOS10通知新框架
#import
//iOS10 自定义通知界面
#import &#64;interface AppDelegate ()&#64;end&#64;implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.//申请授权//1.创建通知中心UNUserNotificationCenter *center &#61; [UNUserNotificationCenter currentNotificationCenter];//设置通知中心的代理&#xff08;iOS10之后监听通知的接收时间和交互按钮的响应是通过代理来完成的&#xff09;center.delegate &#61; self;//2.通知中心设置分类[center setNotificationCategories:[NSSet setWithObjects:[self createCatrgory], nil]];//3.请求授权/**UNAuthorizationOptionUNAuthorizationOptionBadge &#61; (1 <<0),红色圆圈UNAuthorizationOptionSound &#61; (1 <<1),声音UNAuthorizationOptionAlert &#61; (1 <<2),内容UNAuthorizationOptionCarPlay &#61; (1 <<3),车载通知*/[center requestAuthorizationWithOptions:UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound completionHandler:^(BOOL granted, NSError * _Nullable error) {if (granted &#61;&#61; YES) {NSLog(&#64;"授权成功");}}];return YES;
}//当APP处于前台的时候接收到通知
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
{//弹出一个网页UIWebView *webview &#61; [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 400, 500)];webview.center &#61; self.window.center;[webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:&#64;"http://www.itheima.com"]]];[self.window addSubview:webview];//弹出动画webview.alpha &#61; 0;[UIView animateWithDuration:1 animations:^{webview.alpha &#61; 1;}];}#pragma mark - 创建通知分类&#xff08;交互按钮&#xff09;- (UNNotificationCategory *)createCatrgory
{//文本交互(iOS10之后支持对通知的文本交互)/**optionsUNNotificationActionOptionAuthenticationRequired 用于文本UNNotificationActionOptionForeground 前台模式&#xff0c;进入APPUNNotificationActionOptionDestructive 销毁模式&#xff0c;不进入APP*/UNTextInputNotificationAction *textInputAction &#61; [UNTextInputNotificationAction actionWithIdentifier:&#64;"textInputAction" title:&#64;"请输入信息" options:UNNotificationActionOptionAuthenticationRequired textInputButtonTitle:&#64;"输入" textInputPlaceholder:&#64;"还有多少话要说……"];//打开应用按钮UNNotificationAction *action1 &#61; [UNNotificationAction actionWithIdentifier:&#64;"foreGround" title:&#64;"打开" options:UNNotificationActionOptionForeground];//不打开应用按钮UNNotificationAction *action2 &#61; [UNNotificationAction actionWithIdentifier:&#64;"backGround" title:&#64;"关闭" options:UNNotificationActionOptionDestructive];//创建分类/**Identifier:分类的标识符&#xff0c;通知可以添加不同类型的分类交互按钮actions&#xff1a;交互按钮intentIdentifiers&#xff1a;分类内部标识符 没什么用 一般为空就行options:通知的参数 UNNotificationCategoryOptionCustomDismissAction:自定义交互按钮 UNNotificationCategoryOptionAllowInCarPlay:车载交互*/UNNotificationCategory *category &#61; [UNNotificationCategory categoryWithIdentifier:&#64;"category" actions:&#64;[textInputAction,action1,action2] intentIdentifiers:&#64;[] options:UNNotificationCategoryOptionCustomDismissAction];return category;
}//按钮点击事件
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler
{//根据identifer判断按钮类型&#xff0c;如果是textInput则获取输入的文字if ([response.actionIdentifier isEqualToString:&#64;"textInputAction"]) {//获取文本响应UNTextInputNotificationResponse *textResponse &#61; (UNTextInputNotificationResponse *)response;NSLog(&#64;"输入的内容为&#xff1a;%&#64;",textResponse.userText);}//处理其他时间NSLog(&#64;"%&#64;",response.actionIdentifier);
}- (void)applicationWillResignActive:(UIApplication *)application {// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}- (void)applicationDidEnterBackground:(UIApplication *)application {// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}- (void)applicationWillEnterForeground:(UIApplication *)application {// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}- (void)applicationDidBecomeActive:(UIApplication *)application {// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}- (void)applicationWillTerminate:(UIApplication *)application {// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}&#64;end

  • 2.发送通知&#xff08;含分类交互按钮&#xff09;

#pragma mark - 发送本地通知- (IBAction)sendLocalNotification:(id)sender {//1.创建通知中心UNUserNotificationCenter *center &#61; [UNUserNotificationCenter currentNotificationCenter];//2.检查当前用户授权[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {NSLog(&#64;"当前授权状态&#xff1a;%zd",[settings authorizationStatus]);//3.创建通知UNMutableNotificationContent *notification &#61; [[UNMutableNotificationContent alloc] init];//3.1通知标题notification.title &#61; [NSString localizedUserNotificationStringForKey:&#64;"传智播客" arguments:nil];//3.2小标题notification.subtitle &#61; &#64;"hellow world";//3.3通知内容notification.body &#61; &#64;"欢迎来到黑马程序员";//3.4通知声音notification.sound &#61; [UNNotificationSound defaultSound];//3.5通知小圆圈数量notification.badge &#61; &#64;2;//4.创建触发器(相当于iOS9中通知触发的时间)/**通知触发器主要有三种UNTimeIntervalNotificationTrigger 指定时间触发UNCalendarNotificationTrigger 指定日历时间触发UNLocationNotificationTrigger 指定区域触发*/UNTimeIntervalNotificationTrigger * timeTrigger &#61; [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];//5.指定通知的分类 (1)identifer表示创建分类时的唯一标识符 &#xff08;2&#xff09;该代码一定要在创建通知请求之前设置&#xff0c;否则无效notification.categoryIdentifier &#61; &#64;"category";//给通知添加附件(图片 音乐 电影都可以)NSString *path &#61; [[NSBundle mainBundle] pathForResource:&#64;"logo" ofType:&#64;"png"];UNNotificationAttachment *attachment &#61; [UNNotificationAttachment attachmentWithIdentifier:&#64;"image" URL:[NSURL fileURLWithPath:path] options:nil error:nil];notification.attachments &#61; &#64;[attachment];//7.创建通知请求/**Identifier:通知请求标识符&#xff0c;用于删除或者查找通知content&#xff1a;通知的内容trigger&#xff1a;通知触发器*/UNNotificationRequest *request &#61; [UNNotificationRequest requestWithIdentifier:&#64;"localNotification" content:notification trigger:timeTrigger];//8.通知中心发送通知请求[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {if (error &#61;&#61; nil) {NSLog(&#64;"通知发送成功");}else{NSLog(&#64;"%&#64;",error);}}];}];
}

  • 3.通知的移除

#pragma mark - 移除所有通知
- (IBAction)removeAllNotification:(id)sender {//1.创建通知中心UNUserNotificationCenter *center &#61; [UNUserNotificationCenter currentNotificationCenter];//2.删除已经推送过得通知[center removeAllDeliveredNotifications];//3.删除未推送的通知请求[center removeAllPendingNotificationRequests];
}#pragma mark - 移除指定通知
- (IBAction)removeSingleNotification:(id)sender {//1.创建通知中心UNUserNotificationCenter *center &#61; [UNUserNotificationCenter currentNotificationCenter];//2.删除指定identifer的已经发送的通知[center removeDeliveredNotificationsWithIdentifiers:&#64;[&#64;"localNotification"]];//3.删除指定identifer未发送的同志请求[center removeDeliveredNotificationsWithIdentifiers:&#64;[&#64;"localNotification"]];
}

1.3-iOS10通知拓展Extension使用


  • 1.添加通知拓展

这里写图片描述

  • 2.通知的拓展Extension实际上相当于在当前的应用程序重新添加一个应用程序&#xff0c;工程会添加对应的代码文件夹和target

这里写图片描述

  • 3.默认拓展控制器只有一个Label&#xff0c;我们可以在这里自定义我们的控制器界面

这里写图片描述

  • 4.也可以加载通知中推送的数据

这里写图片描述

  • 5.配置plist文件 
    • 默认情况下应用程序是不会加载拓展界面的&#xff0c;需要配置plist文件&#xff0c;关闭系统默认通知界面

这里写图片描述

  • 6.运行 
    • 运行的话不需要选择Extension的target&#xff0c;直接选择应用程序的target即可

这里写图片描述

 

1.4-效果演示

这里写图片描述


推荐阅读
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 提升视觉效果:Unity3D中的HDR与Bloom技术(高动态范围成像与光线散射)
    提升视觉效果:Unity3D中的HDR与Bloom技术(高动态范围成像与光线散射) ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 当使用 `new` 表达式(即通过 `new` 动态创建对象)时,会发生两件事:首先,内存被分配用于存储新对象;其次,该对象的构造函数被调用以初始化对象。为了确保资源管理的一致性和避免内存泄漏,建议在使用 `new` 和 `delete` 时保持形式一致。例如,如果使用 `new[]` 分配数组,则应使用 `delete[]` 来释放内存;同样,如果使用 `new` 分配单个对象,则应使用 `delete` 来释放内存。这种一致性有助于防止常见的编程错误,提高代码的健壮性和可维护性。 ... [详细]
  • 本文探讨了在任务完成后将其转换为最终状态时的异常处理机制。通过分析 `TaskCompletionSource` 的使用场景,详细阐述了其在异步编程中的重要作用,并提供了具体的实现方法和注意事项,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
author-avatar
恋苦尘雪77
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有