iOS10通知及通知拓展Extension使用详解(附Demo)

2024-09-02 15:58

本文主要是介绍iOS10通知及通知拓展Extension使用详解(附Demo),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.1-iOS10拓展简介

1.2-iOS10通知使用

1.3-iOS10通知拓展Extension使用

1.4-效果演示

  • 如果对开发有兴趣的可以来黑马学习iOS开发:黑马程序员

  • 源代码下载地址:Deme下载

1.1-iOS10拓展简介

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

    • Extension功能可以理解为自定义系统界面
  • 本小节我们就以自定义系统通知界面来学习一下Extension的使用

    • 其他功能的Extension我们不可能逐一讲解,希望大家能够在理解的基础上,做到举一反三

这里写图片描述

1.2-iOS10通知使用

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

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


#import "AppDelegate.h"//iOS10通知新框架
#import <UserNotifications/UserNotifications.h>
//iOS10 自定义通知界面
#import <UserNotificationsUI/UserNotificationsUI.h>@interface AppDelegate ()<UNUserNotificationCenterDelegate>@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.//申请授权//1.创建通知中心UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];//设置通知中心的代理(iOS10之后监听通知的接收时间和交互按钮的响应是通过代理来完成的)center.delegate = self;//2.通知中心设置分类[center setNotificationCategories:[NSSet setWithObjects:[self createCatrgory], nil]];//3.请求授权/**UNAuthorizationOptionUNAuthorizationOptionBadge   = (1 << 0),红色圆圈UNAuthorizationOptionSound   = (1 << 1),声音UNAuthorizationOptionAlert   = (1 << 2),内容UNAuthorizationOptionCarPlay = (1 << 3),车载通知*/[center requestAuthorizationWithOptions:UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound completionHandler:^(BOOL granted, NSError * _Nullable error) {if (granted == YES) {NSLog(@"授权成功");}}];return YES;
}//当APP处于前台的时候接收到通知
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
{//弹出一个网页UIWebView *webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 400, 500)];webview.center = self.window.center;[webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.itheima.com"]]];[self.window addSubview:webview];//弹出动画webview.alpha = 0;[UIView animateWithDuration:1 animations:^{webview.alpha = 1;}];}#pragma mark - 创建通知分类(交互按钮)- (UNNotificationCategory *)createCatrgory
{//文本交互(iOS10之后支持对通知的文本交互)/**optionsUNNotificationActionOptionAuthenticationRequired  用于文本UNNotificationActionOptionForeground  前台模式,进入APPUNNotificationActionOptionDestructive  销毁模式,不进入APP*/UNTextInputNotificationAction *textInputAction = [UNTextInputNotificationAction actionWithIdentifier:@"textInputAction" title:@"请输入信息" options:UNNotificationActionOptionAuthenticationRequired textInputButtonTitle:@"输入" textInputPlaceholder:@"还有多少话要说……"];//打开应用按钮UNNotificationAction *action1 = [UNNotificationAction actionWithIdentifier:@"foreGround" title:@"打开" options:UNNotificationActionOptionForeground];//不打开应用按钮UNNotificationAction *action2 = [UNNotificationAction actionWithIdentifier:@"backGround" title:@"关闭" options:UNNotificationActionOptionDestructive];//创建分类/**Identifier:分类的标识符,通知可以添加不同类型的分类交互按钮actions:交互按钮intentIdentifiers:分类内部标识符  没什么用 一般为空就行options:通知的参数   UNNotificationCategoryOptionCustomDismissAction:自定义交互按钮   UNNotificationCategoryOptionAllowInCarPlay:车载交互*/UNNotificationCategory *category = [UNNotificationCategory categoryWithIdentifier:@"category" actions:@[textInputAction,action1,action2] intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction];return category;
}//按钮点击事件
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler
{//根据identifer判断按钮类型,如果是textInput则获取输入的文字if ([response.actionIdentifier isEqualToString:@"textInputAction"]) {//获取文本响应UNTextInputNotificationResponse *textResponse = (UNTextInputNotificationResponse *)response;NSLog(@"输入的内容为:%@",textResponse.userText);}//处理其他时间NSLog(@"%@",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:.
}@end
  • 2.发送通知(含分类交互按钮)

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

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

1.3-iOS10通知拓展Extension使用

  • 1.添加通知拓展

这里写图片描述

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

这里写图片描述

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

这里写图片描述

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

这里写图片描述

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

这里写图片描述

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

这里写图片描述

1.4-效果演示

这里写图片描述

这篇关于iOS10通知及通知拓展Extension使用详解(附Demo)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130411

相关文章

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建