与上一篇文章一样,本文专门介绍iOS 12中出现的Notifications更改。
在上一篇文章中,我谈到了常规创新,这一次,我将更详细地介绍通知分组。
在iOS 12中分组
为了在iOS 12中对来自应用程序的通知进行分组,您无需执行任何操作,分组将自动执行。 屏幕上的通知数量达到5时将开始堆积。
用户有机会通过系统设置影响分组。
- 自动 (默认)-应用程序控制分组设置。
- 通过应用程序 -忽略应用程序设置,来自应用程序的所有通知都添加到单个堆栈中。
- 关 -忽略应用程序设置,禁用通知分组。
分组设置
只有在设置中使用“ 自动”标志时,我们才能影响消息的分组。 为此,通知必须指定thread-id参数。 为了清楚起见,我们还将线程ID传递给字幕通知:
let content = UNMutableNotificationContent() content.threadIdentifier = threadId content.subtitle = "Thread ID: \(threadId)"
我们发送了一些消息,并查看了分组的结果:
您还可以传递thread-id来推送通知:
{ "aps" : { "alert" : { "title" : "Cat Title" "body" : "Cat Body" } "thread-id" : "all-cats" } }
当您为通知指定标识符时,请不要忘记在UNNotificationCategory中指定它,否则将不会在通知的扩展名中对其进行处理:
UNNotificationCategory(identifier: "Cat-Category", actions: actions, intentIdentifiers: ["all-cats", "3-star-cats"], options: [])
对于类别,您可以指定用户将在设备上显示的消息的格式,这是iOS 12的创新之一。只有在初始化类别时才能这样做:
UNNotificationCategory(identifier: "category-simple", actions: actions, intentIdentifiers: ["all-cats", "3-star-cats"], hiddenPreviewsBodyPlaceholder: nil, categorySummaryFormat: "%u %@", options: [])
%u参数负责组中的消息数量;可以使用summaryArgumentCount参数对其进行修改。 例如,您发布了一组新的猫,其中有10张新图片。 向用户发送10支枪没有意义,您可以发送一条计数器等于10的消息。 %@参数在屏幕上显示变量summaryArgument的值:
let content = UNMutableNotificationContent() content.summaryArgumentCount = 10 content.summaryArgument = " "
在每个组中,我们有3条消息,但是由于指定了summaryArgumentCount参数,因此显示的消息数等于20。而且summaryArgument允许我们添加推送通知所属的类别的名称。 不错,但是现在我们遇到了本地化问题。
本地化
要实现本地化任务,请将Stringdict文件添加到项目中。
将Localized String Key更改为NOTIFICATION_SUMMARY ,否则,尽管接收到本地化字符串时,带有字典名称的键将作为参数传递,但不会处理字典中的值。 其余值如图所示:
在字典的文件检查器中,选择Localize 。
我们指定文件进行本地化。
我们进入项目设置并添加语言以本地化俄语(ru) 。
多余的文件可以从项目中删除。
在代码中,我们获取了本地化的字符串,并将其作为categorySummaryFormat参数传递:
let summary = NSString.localizedUserNotificationString(forKey: "NOTIFICATION_SUMMARY", arguments: nil) let category = UNNotificationCategory(identifier: "Cat-Category", actions: actions, intentIdentifiers: ["all-cats", "3-star-cats"], hiddenPreviewsBodyPlaceholder: nil, categorySummaryFormat: summary, options: [])
结果,我们获得了出色的应用程序本地化。
为上一篇文章创建的项目已更新,可以在github上找到代码。 WWDC上有两个报告专门用于通知的实现: 用户通知中的新增功能和使用分组通知 。 我们将在9月28日于莫斯科举行的MBLT DEV 2018上讨论创新技术。
祝你有美好的一周! ^ _ ^