前语
告诉中心是iOS中强大的功用之一,它答应应用程序在后台或前台发送告诉,以便向用户传递重要信息。本文将介绍iOS中的告诉中心的基本概念和用法,并讨论怎么创建和处理自定义告诉。
一、告诉中心是什么
iOS 的告诉中心是一个体系等级的功用,用于集中办理和显现各种告诉,包括来自应用程序、体系和其他来历的告诉。能够把它理解为一个集中办理和传递告诉的体系组件。这个组件答应应用程序在不同的状况下发送告诉,例如当应用程序处于后台或前台时,或许当特定事情产生时。这个组件供给了一个统一的界面,让用户检查和处理告诉。
告诉中心能够用于多种用途,例如:
- 提醒用户进行操作或检查重要信息。
- 告诉用户关于应用程序的状况改变,例如下载完成、网络连接状况改变等。
- 在应用程序之间进行通讯和数据传递。
二、告诉分类
在 iOS 中,不同的告诉分类能够以不同的样式和交互办法显现,咱们能够经过指定告诉的分类,定制不同的按钮、操作和样式,供给更赋有吸引力和有用的告诉体会。
常见的 iOS 告诉分类有:
-
基本告诉分类(Default Notification Category):这是默许的告诉分类,用于显现一般的文本告诉。它能够包括一个标题、副标题和正文,并供给默许的告诉按钮,如 “检查” 或 “忽略”。
-
按钮告诉分类(Button Notification Category):这种分类答应你在告诉中增加自定义按钮。例如,你能够在告诉中增加 “喜爱”、”分享” 或 “回复” 等按钮,以便用户能够直接在告诉中履行相关操作。
-
文本输入告诉分类(TextInput Notification Category):经过运用文本输入分类,你能够在告诉中增加一个文本输入框,以便用户能够直接在告诉中输入文本。这对于完成快速回复功用十分有用。
-
图像告诉分类(Image Notification Category):这种分类答应你在告诉中显现图片。你能够在告诉中增加一个大图像,以供给更具吸引力的告诉体会。
-
发展告诉分类(Progress Notification Category):这种分类用于显现带有发展条的告诉。你能够在告诉中显现一个发展指示器,以向用户展示某个任务的发展状况,例如文件下载或上传发展。
上面只是列举了一些常见的告诉分类,具体定制的要求你能够检查 User Notifications 结构(UNNotificationCategory
和 UNNotificationAction
)来进行定义和运用。
三、运用告诉中心发送体系告诉
iOS供给了一个简单的办法来发送体系告诉,咱们也叫本地告诉(Local Notification),这种告诉是加入到体系等级的数据库中,即运用户进入飞翔形式,或许重启手机,当到了设定的告诉触发时刻,就会触发体系的告诉中心,告诉到用户。
体系告诉的创建和发送运用的是UNUserNotificationCenter
类和相关API能够完成,示例代码如下:
// 导入需求的结构
#import <UserNotifications/UserNotifications.h>
// 发送体系告诉的办法
- (void)sendSystemNotification {
// 创建告诉内容
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = @"体系告诉标题";
content.body = @"这是一条体系告诉的内容";
content.sound = [UNNotificationSound defaultSound];
// 创建告诉触发器
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO]; // 5秒后触发告诉
// 创建告诉恳求
NSString *identifier = @"SystemNotificationIdentifier";
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifier content:content trigger:trigger];
// 增加告诉恳求到告诉中心
[[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"发送体系告诉失利: %@", error);
} else {
NSLog(@"体系告诉发送成功");
}
}];
}
// 在恰当的方位调用以上办法即可发送体系告诉。
上述代码中,咱们首先导入了UserNotifications
结构,创建了一个UNMutableNotificationContent
目标,设置了告诉的标题、内容和铃声等属性。然后,咱们创建了一个UNTimeIntervalNotificationTrigger
目标,将告诉触发时刻设置为5分钟后,并创建了一个UNNotificationRequest
目标,将告诉内容和触发器目标增加到其中。最终,咱们运用UNUserNotificationCenter
类将本地告诉恳求增加到用户告诉中心中。
需求留意的是,在运用UserNotifications
结构创建本地告诉时,咱们需求在应用程序中恳求用户授权,并获取告诉权限。在 iOS 10 及以上版别中,咱们能够运用UNUserNotificationCenter
类来恳求用户授权和办理本地告诉,示例代码如下:
// 导入 UserNotifications 结构
#import <UserNotifications/UserNotifications.h>
// 恳求告诉拜访授权
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert + UNAuthorizationOptionSound)
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!granted) {
NSLog(@"用户未授权告诉拜访");
}
}];
iOS还供给一种长途告诉(Remote Notification)的告诉来告诉用户,长途告诉在以下状况下十分有用:
-
为即时聊天、交际媒体互动供给实时告诉和即时反应。
-
根据用户的爱好、行为或方位等信息推送个性化和定制告诉,引起用户爱好,有助于进步用户参与度和体会,并增强应用的粘性。
-
能够用于发送重要事情和提醒,例如日程安排、会议告诉、提醒付款、航班时刻变更等。
-
当你的应用程序有新功用或推行活动时,能够用长途告诉告诉用户并促使他们翻开应用程序,进步用户转化率。
-
长途告诉能够触发应用程序在后台进行处理,这时能够从服务器拉取数据、履行后台任务、更新应用程序内容等。
长途告诉在许多需求及时告诉更新的场景下十分有用,但运用时应留意用户隐私和告诉乱用的问题,保证告诉合规、频率正常。
设置长途告诉的过程如下:
- 在Xcode中翻开你的项目,并保证你的应用程序已经正确装备了推送告诉的证书。
- 在AppDelegate文件中,导入UserNotifications结构。
- 在AppDelegate类中,获取告诉授权后,注册应用程序的长途告诉设置(主线程):
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
});
四、告诉响应流程
当用户点击本地告诉,触发的代码流程如下:
- 假如应用程序没有运行,则首先触发AppDelegate中的
didFinishLaunchingWithOptions
办法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullable NSDictionary<UIApplicationLaunchOptionsKey, id> *)launchOptions API_AVAILABLE(ios(3.0));
- 假如应用程序正在运行/第一步履行结束,则触发UNUserNotificationCenterDelegate中的
didReceiveNotificationResponse
办法,用户能够在该办法中处理接收到的告诉,获取告诉的内容和相关信息,并履行相应的操作,函数如下:
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler API_AVAILABLE(macos(10.14), ios(10.0), watchos(3.0)) API_UNAVAILABLE(tvos);
需求留意该办法被调用的前提是
- 需求假如你运用了UNUserNotificationCenter来注册告诉
- 设置了相应的署理目标,署理是
UNUserNotificationCenterDelegate
当用户点击长途告诉,触发的代码流程如下::
- 假如应用程序没有运行,则首先触发AppDelegate中的
didFinishLaunchingWithOptions
办法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullable NSDictionary<UIApplicationLaunchOptionsKey, id> *)launchOptions API_AVAILABLE(ios(3.0));
- AppDelegate中的
didReceiveRemoteNotification
办法,用户能够在该办法中处理接收到的告诉,获取告诉的内容和相关信息,并履行相应的操作,函数如下:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler API_AVAILABLE(ios(7.0));
iOS接收到长途告诉运用的是苹果推送告诉服务(Apple Push Notification Service,简称APNs)进行传递,是以特定的格式进行传输和解析的。通常格式如下:
"aps": {
"alert": {
"title": "Notification Title",
"body": "Notification Body"
},
"sound": "default",
"badge": 1
}
-
"aps"
字段:这是一个必需字段,包括了与告诉相关的信息,如标题、正文和声响等。 -
"sound"
字段(可选):告诉到达时播放的声响。能够是预设的体系声响,也能够是自定义声响文件。 -
"badge"
字段(可选):应用程序图标上显现的告诉数字。 -
其他自定义字段:能够在告诉负载中增加自定义字段,以满足你的应用程序需求。
五、总结
本文总结了iOS告诉中心的工作,告诉的分类以及怎么运用告诉,还有许多相关的更细知识点可能没有讨论到,欢迎谈论发问,咱们一同讨论。