四、系统推送集成指南:本地与远程通知编程详解

更新:11-20 名人轶事 我要投稿 纠错 投诉

显示警报、播放声音或标记其图标以响应到达的通知。显示带有通知的自定义操作按钮。通常,您在应用程序完成启动之前执行所有配置。在iOS 和tvOS 中,这意味着将通知配置为不晚于application:didFinishLaunchingWithOptions: 支持UIApplication 委托的方法。在watchOS 中,配置此支持不晚于WKExtension 委托的applicationDidFinishLaunching 方法。您可以稍后执行此配置,但在此配置完成之前,您必须避免为您的应用安排任何本地或远程通知。

支持远程通知的应用程序需要额外的配置,这在配置远程通知支持中进行了描述。

Requesting Authorization to Interact with the User - 请求授权与用户交互

在iOS、tvOS 和watchOS 中,应用程序必须有权显示警报、播放声音或标记应用程序图标以响应传入的通知。请求授权将这些交互的控制权交给用户,用户可以批准或拒绝您的请求。用户还可以稍后在系统设置中更改应用程序的授权设置。

要请求授权,请调用单例UNUserNotificationCenter 对象的requestAuthorizationWithOptions:completionHandler: 方法。如果您的应用程序被授权用于所有请求的交互类型,系统将调用您的完成处理程序块,并将授予的参数设置为YES。如果不允许一种或多种交互类型,则该参数为NO。清单2-1 显示了如何请求授权来播放声音和显示警报。使用完成处理程序块根据交互类型是被授予还是被拒绝来更新应用程序的行为。

清单2-1 请求用户交互授权

//超频

UNUserNotificationCenter* center=[UNUserNotificationCenter currentNotificationCenter];

[中心requestAuthorizationWithOptions:(UNAuthorizationOptionAlert + UNAuthorizationOptionSound)

completionHandler:^(BOOL 授予, NSError * _Nullable 错误) {

//根据授权启用或禁用功能。

}];

//斯威夫特

让中心=UNUserNotificationCenter.current()

center.requestAuthorization(options: [.alert,sound]) { (授予,错误) in

//根据授权启用或禁用功能。

当您的应用首次启动并调用requestAuthorizationWithOptions:completionHandler: 方法时,系统会提示用户授予或拒绝请求的交互。由于保存了用户的响应,因此在后续启动期间调用此方法不会再次提示用户。

注意:用户可以随时使用系统设置更改应用程序的授权交互类型。要准确确定可以使用哪些类型的交互,请调用UNUserNotificationCenter 的getNotificationSettingsWithCompletionHandler: 方法。

Configuring Categories and Actionable Notifications - 配置类别和可操作的通知

可操作的通知为用户提供了一种快速、简单的方法来执行相关任务以响应通知。用户可以单击自定义操作按钮,而不是强迫用户启动您的应用程序。单击时,每个按钮都会关闭通知界面,并将所选操作转发到您的应用程序以立即处理。将操作转发到您的应用程序可以防止用户在应用程序中进一步导航以执行操作,从而节省时间。

应用程序必须明确添加对可操作通知的支持。启动时,应用程序必须注册一个或多个类别来定义应用程序发送的通知类型。与每个类别相关联的是用户在发送该类型的通知时可以采取的操作。每个类别最多可以有四个与其关联的操作,但实际显示的操作数量取决于通知的显示方式和位置。例如,横幅显示不超过两个操作。

注意:可操作通知仅在iOS 和watchOS 上受支持。

Registering the Notification Categories for Your App - 注册您的应用程序的通知类别

类别定义您的应用程序支持的通知类型,并向系统传达您希望如何呈现通知。您可以使用类别将自定义操作与通知相关联,并指定如何处理该类型通知的选项。例如,您可以使用类别选项来指定是否可以在CarPlay 环境中显示通知。

启动时,您可以使用单例UNUserNotificationCenter 对象的setNotificationCategories: 方法一次性注册应用程序的所有类别。在调用此方法之前,您需要创建一个或多个UNNotificationCategory 类的实例,并指定显示该类型通知时要使用的类别名称和选项。类别名称是应用程序的内部名称,用户永远看不到。当您发送通知时,您可以在通知的负载中包含类别名称,然后使用该负载来检索选项并显示通知。

清单2-2 显示了如何创建一个简单的UNNotificationCategory 对象并向系统注册它。该类别名为“GENERAL”,并配置了自定义关闭操作选项,这使得系统在用户关闭通知界面而不执行任何其他操作时通知应用程序。

//清单2-2创建并注册通知类别

//超频

UNNotificationCategory* 一般类别=[UNNotificationCategory

CategoryWithIdentifier:@"一般"

actions:@[]

意图标识符:@[]

options:UNNotificationCategoryOptionCustomDismissAction];

//注册通知类别。

UNUserNotificationCenter* center=[UNUserNotificationCenter currentNotificationCenter];

[center setNotificationCategories:[NSSet setWithObjects:generalCategory, nil]];

//迅速

让GeneralCategory=UNNotificationCategory(identifier: "一般",

actions: [],

意图标识符: [],

options:customDismissAction)

//注册类别。

让中心=UNUserNotificationCenter.current()

center.setNotificationCategories([generalCategory]) 您无需为应用程序安排的所有通知分配类别。但是,如果您不包含类别,则将显示您的通知,而不会显示任何自定义操作或配置选项。

Adding Custom Actions to Your Categories - 向您的类别添加自定义操作

您注册的每个类别最多可以包含四个自定义操作。当类别包含自定义操作时,按钮将添加到通知界面,每个按钮都有一个自定义操作标题。当用户点击您的自定义操作之一时,操作标识符将发送到您的应用程序,并在必要时启动您的应用程序。

要定义自定义操作,请创建UNNotificationAction 对象并将其添加到类别对象之一。每个操作都包含相应按钮的标题字符串以及如何显示按钮和处理相关任务的选项。当用户选择某个操作时,您的应用程序将获得该操作的标识符字符串,然后您可以使用该标识符字符串来标识要执行的任务。清单2-3 通过添加具有两个自定义操作的新类别来扩展清单2-2 中的示例。

//清单2-3 为类别定义自定义操作

//超频

UNNotificationCategory* 一般类别=[UNNotificationCategory

CategoryWithIdentifier:@"一般"

actions:@[]

意图标识符:@[]

options:UNNotificationCategoryOptionCustomDismissAction];

//为过期计时器通知创建自定义操作。

UNNotificationAction* snoozeAction=[UNNotificationAction

actionWithIdentifier:@"SNOOZE_ACTION"

title:@"贪睡"

选项:UNNotificationActionOptionNone];

UNNotificationAction* stopAction=[UNNotificationAction

actionWithIdentifier:@"STOP_ACTION"

title:@"停止"

options:UNNotificationActionOptionForeground];

//使用自定义操作创建类别。

UNNotificationCategory* 过期类别=[UNNotificationCategory

CategoryWithIdentifier:@"TIMER_EXPIRED"

actions:@[snoozeAction, stopAction]

意图标识符:@[]

options:UNNotificationCategoryOptionNone];

//注册通知类别。

UNUserNotificationCenter* center=[UNUserNotificationCenter currentNotificationCenter];

[center setNotificationCategories:[NSSet setWithObjects:generalCategory,expiredCategory,

nil]];//斯威夫特

让GeneralCategory=UNNotificationCategory(identifier: "一般",

actions: [],

意图标识符: [],

options:customDismissAction)

//为TIMER_EXPIRED 类别创建自定义操作。

让snoozeAction=UNNotificationAction(identifier: "SNOOZE_ACTION",

title: "贪睡",

options: UNNotificationActionOptions(rawValue: 0))

让stopAction=UNNotificationAction(identifier: "STOP_ACTION",

title: "停止",

选项:前景)

让expiredCategory=UNNotificationCategory(identifier: "TIMER_EXPIRED",

actions: [贪睡动作,停止动作],

意图标识符: [],

options: UNNotificationCategoryOptions(rawValue: 0))

//注册通知类别。

让中心=UNUserNotificationCenter.current()

center.setNotificationCategories([generalCategory, expiredCategory]) 虽然您可以为每个类别最多指定四个自定义操作,但在某些情况下系统可能只显示前两个操作。例如,在横幅中显示通知时,仅显示两个操作。初始化UNNotificationCategory 对象时,请始终配置操作数组,以便最相关的操作位于该数组中。

如果使用UNTextInputNotificationAction 类配置操作,系统将为用户提供一种在通知响应中输入文本的方法。文本输入操作对于从用户收集自由格式文本非常有用。例如,消息传递应用程序可以允许用户提供对消息的定制响应。当文本输入操作传递到应用程序进行处理时,系统将用户的响应打包在UNTextInputNotificationResponse 对象中。

有关如何处理自定义操作选择的信息,请参阅响应自定义操作的选择。

Preparing Custom Alert Sounds - 准备自定义警报声音

本地和远程通知可以指定在发送通知时播放的自定义警报声音。您可以将音频数据打包为aiff、wav 或caf 文件。由于自定义声音由系统声音设备播放,因此必须采用以下音频数据格式之一:

Linear PCMMA4 (IMA/ADPCM)LawaLaw 将自定义声音文件放置在应用程序包或应用程序容器目录的Library/Sounds 文件夹中。自定义声音播放时长必须低于30 秒。如果自定义声音超过此限制,将播放默认系统声音。

您可以使用afconvert 工具转换声音。例如,要将16 位线性PCM 系统声音Submarine.aiff 转换为CAF 文件中的IMA4 音频,请在终端应用程序中使用以下命令:

afconvert /System/Library/Sounds/Submarine.aiff~ /Desktop/sub.caf -d ima4 -f caff -v 有关如何将声音文件与通知关联的信息,请参阅向通知内容添加声音。

Managing Your App’s Notification Settings - 管理应用程序的通知设置

由于用户可以随时更改应用程序的通知设置,因此您可以使用共享UNUserNotificationCenter 对象的getNotificationSettingsWithCompletionHandler: 方法随时获取应用程序的授权状态。该方法返回一个UNNotificationSettings对象,其内容反映了应用程序当前的授权状态和当前的通知环境。

使用UNNotificationSettings 对象中的信息来调整应用程序的通知相关代码。您可以将应用程序的警报、徽章和声音授权设置传达给提供商,以便其可以调整任何远程通知负载中包含的选项。 (提供程序是您部署和管理并配置为使用APN 的服务器。有关提供程序的详细信息,请参阅APNs 概述。)您可以使用其他设置来调整通知的计划和配置方式。有关可用设置的详细信息,请参阅UNNotificationSettings 类参考。

Managing Delivered Notifications - 管理已发送的通知

当您的应用或用户不直接处理本地和远程通知时,它们会显示在通知中心以供稍后查看。使用共享UNUserNotificationCenter 对象的getDeliveredNotificationsWithCompletionHandler: 方法来获取仍显示在通知中心中的通知列表。如果您发现任何通知现已过时且不应向用户显示,您可以使用removeDeliveredNotificationsWithIdentifiers: 方法删除它们。

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!

用户评论

淡淡の清香

看来又要学点新知识了,学习怎么给我的App添加本地和远程通知!

    有17位网友表示赞同!

╭摇划花蜜的午后

这篇文章能帮我更好地理解如何实现App中的通知功能吗?

    有14位网友表示赞同!

夏至离别

我一直想让我的App支持多渠道的通知,这篇文章能给我一些启发吗?

    有18位网友表示赞同!

情深至命

听说系统推送集成有很大的变化,这个指南是不是特别详细呢?

    有5位网友表示赞同!

寻鱼水之欢

本地和远程通知的区别在哪儿?这篇文章能够解释清楚?

    有12位网友表示赞同!

搞搞嗎妹妹

终于可以自己搭建 App 的通知功能了,感觉很酷!

    有20位网友表示赞同!

几妆痕

学习笔记写在这里啊,以后还可以参考用。

    有20位网友表示赞同!

罪歌

这个指南里会涉及到哪些具体的编程技巧吗?

    有7位网友表示赞同!

ー半忧伤

希望文章能提供一些实用的代码例子,方便跟着学。

    有17位网友表示赞同!

顶个蘑菇闯天下i

对于不同平台的通知机制有什么讲究?这篇文章会有介绍吗?

    有11位网友表示赞同!

放血

最近开发App的时候遇到通知问题,这个指南应该可以解决我的难题吧!

    有11位网友表示赞同!

陌上花

系统推送集成真是越来越强大啦,期待了解更多新功能!

    有20位网友表示赞同!

心脏偷懒

不知道有没有关于自定义通知样式的教程,这也很重要啊!

    有18位网友表示赞同!

浅笑√倾城

我已经有一定的编程基础,这个指南难度合适吗?

    有15位网友表示赞同!

在哪跌倒こ就在哪躺下

希望文章能够解答一些常见问题,比如如何排查通知错误?

    有9位网友表示赞同!

你tm的滚

学习完这篇文章后,我的App就能实现更丰富的用户体验了吗?

    有6位网友表示赞同!

君临臣

学习新的知识总是很让人兴奋的,期待这个指南能让我快速上手!

    有5位网友表示赞同!

冷青裳

系统推送集成真是提升程序效率的好工具,值得好好学习一下!

    有7位网友表示赞同!

来自火星的我

如果还有其他相关资料或者视频教程,会更好!

    有9位网友表示赞同!

【四、系统推送集成指南:本地与远程通知编程详解】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:揭秘Diao群现象:社交圈层的秘密社交 下一篇:新春佳节迎财运:大年初五财神到