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

相关文章

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架