前语

告诉中心是iOS中强大的功用之一,它答应应用程序在后台或前台发送告诉,以便向用户传递重要信息。本文将介绍iOS中的告诉中心的基本概念和用法,并讨论怎么创建和处理自定义告诉。

一、告诉中心是什么

iOS 的告诉中心是一个体系等级的功用,用于集中办理和显现各种告诉,包括来自应用程序、体系和其他来历的告诉。能够把它理解为一个集中办理和传递告诉的体系组件。这个组件答应应用程序在不同的状况下发送告诉,例如当应用程序处于后台或前台时,或许当特定事情产生时。这个组件供给了一个统一的界面,让用户检查和处理告诉。

告诉中心能够用于多种用途,例如:

  • 提醒用户进行操作或检查重要信息。
  • 告诉用户关于应用程序的状况改变,例如下载完成、网络连接状况改变等。
  • 在应用程序之间进行通讯和数据传递。

二、告诉分类

在 iOS 中,不同的告诉分类能够以不同的样式和交互办法显现,咱们能够经过指定告诉的分类,定制不同的按钮、操作和样式,供给更赋有吸引力和有用的告诉体会。

常见的 iOS 告诉分类有:

  • 基本告诉分类(Default Notification Category):这是默许的告诉分类,用于显现一般的文本告诉。它能够包括一个标题、副标题和正文,并供给默许的告诉按钮,如 “检查” 或 “忽略”。

  • 按钮告诉分类(Button Notification Category):这种分类答应你在告诉中增加自定义按钮。例如,你能够在告诉中增加 “喜爱”、”分享” 或 “回复” 等按钮,以便用户能够直接在告诉中履行相关操作。

  • 文本输入告诉分类(TextInput Notification Category):经过运用文本输入分类,你能够在告诉中增加一个文本输入框,以便用户能够直接在告诉中输入文本。这对于完成快速回复功用十分有用。

  • 图像告诉分类(Image Notification Category):这种分类答应你在告诉中显现图片。你能够在告诉中增加一个大图像,以供给更具吸引力的告诉体会。

  • 发展告诉分类(Progress Notification Category):这种分类用于显现带有发展条的告诉。你能够在告诉中显现一个发展指示器,以向用户展示某个任务的发展状况,例如文件下载或上传发展。

上面只是列举了一些常见的告诉分类,具体定制的要求你能够检查 User Notifications 结构(UNNotificationCategoryUNNotificationAction)来进行定义和运用。

三、运用告诉中心发送体系告诉

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)的告诉来告诉用户,长途告诉在以下状况下十分有用:

  • 为即时聊天、交际媒体互动供给实时告诉和即时反应。

  • 根据用户的爱好、行为或方位等信息推送个性化和定制告诉,引起用户爱好,有助于进步用户参与度和体会,并增强应用的粘性。

  • 能够用于发送重要事情和提醒,例如日程安排、会议告诉、提醒付款、航班时刻变更等。

  • 当你的应用程序有新功用或推行活动时,能够用长途告诉告诉用户并促使他们翻开应用程序,进步用户转化率。

  • 长途告诉能够触发应用程序在后台进行处理,这时能够从服务器拉取数据、履行后台任务、更新应用程序内容等。

长途告诉在许多需求及时告诉更新的场景下十分有用,但运用时应留意用户隐私和告诉乱用的问题,保证告诉合规、频率正常。

设置长途告诉的过程如下:

  1. Xcode中翻开你的项目,并保证你的应用程序已经正确装备了推送告诉的证书。
  2. 在AppDelegate文件中,导入UserNotifications结构。
  3. 在AppDelegate类中,获取告诉授权后,注册应用程序的长途告诉设置(主线程):
dispatch_async(dispatch_get_main_queue(), ^{
  [[UIApplication sharedApplication] registerForRemoteNotifications];
});

四、告诉响应流程

当用户点击本地告诉,触发的代码流程如下:

  1. 假如应用程序没有运行,则首先触发AppDelegate中的didFinishLaunchingWithOptions办法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullable NSDictionary<UIApplicationLaunchOptionsKey, id> *)launchOptions API_AVAILABLE(ios(3.0));
  1. 假如应用程序正在运行/第一步履行结束,则触发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

当用户点击长途告诉,触发的代码流程如下::

  1. 假如应用程序没有运行,则首先触发AppDelegate中的didFinishLaunchingWithOptions办法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullable NSDictionary<UIApplicationLaunchOptionsKey, id> *)launchOptions API_AVAILABLE(ios(3.0));
  1. 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告诉中心的工作,告诉的分类以及怎么运用告诉,还有许多相关的更细知识点可能没有讨论到,欢迎谈论发问,咱们一同讨论。