ハイライト
iOS 15 では、4 つの通知中断レベル (パッシブ、アクティブ、時間重視、クリティカル) と新しい通信通知メカニズムが導入され、メッセージと通話の通知がフォーカスと通知の概要に浸透できるようにするとともに、SiriKit インテントを通じて通知を連絡先やショートカットと深く統合します。
主な内容
通知のビジュアルアップグレード
以前は、通知アクション ボタンにはテキストしかなく、ユーザーは各ボタンの機能を理解するために読む必要がありました。
iOS 15 の通知は、コンテンツとメディアをより重視した新しい外観になっています。アクションボタンにアイコンを付けることができるようになりました。使用UNNotificationActionIconシステムアイコンまたはテンプレートアイコンを作成して、UNNotificationActionコンストラクタ。通知を展開するとボタンの横にアイコンが表示されるので、アクションを一目で識別しやすくなります。
同時に、通知内のアプリケーションアイコンのサイズも大きくなり、高解像度のアイコンを提供する必要があります。
システム管理ツール: 通知の概要と焦点
ユーザーは毎日何十もの通知を受け取り、ロック画面は常に中断されます。iOS 15 では 2 つの管理ツールが導入されています。
通知の概要: アクティブな中断の数を減らすために、事前に設定された時間 (午前 8 時や午後 6 時など) に非緊急通知をバッチで表示できます。概要に含まれる通知は、引き続きロック画面の通知リストに表示されます。開発者が設定できるのは、relevanceScore重要な通知は概要の先頭に置いてください。
フォーカス: ユーザーはアクティビティや時間帯 (仕事、睡眠、読書など) に基づいてフォーカスを設定し、特定のアプリや連絡先のみが中断通知を送信できるようにすることができます。たとえば、仕事のフォーカスでは、メール、メッセージ、同僚からの直接コミュニケーションのみが侵入できます。
中断レベル: 通知を「賢明」にする
以前は、すべての通知は大音量または無音のいずれかであり、その間の状態はありませんでした。iOS 15の導入UNNotificationInterruptionLevel、次の 4 つのレベルに分かれています。
| レベル | 行動 | 浸透の焦点/概要 | 該当するシナリオ |
|---|---|---|---|
| パッシブ | サイレント配信、画面も着信音もなし | いいえ | レストランのおすすめ、新シリーズ発売 |
| アクティブ | リング + 明るい画面 (デフォルトの動作) | いいえ | スポーツのスコア、ライブブロードキャストのリマインダー |
| 時間に敏感 | リング + 明るい画面 | はい (ユーザーの許可が必要です) | アカウントのセキュリティ、荷物の配送 |
| クリティカル | リング + 明るい画面、バイパスミュートスイッチ | はい | 悪天候、警戒警報 |
パッシブレベルは、「すぐに読む必要はないが、時間があるときに見ておきたい」通知に適しています。Time Sensitive では、ユーザーは Xcode で対応する機能をオンにする必要がありますが、悪用することはできません。ユーザーはアプリケーションの Time Sensitive 権限をオフにすることを選択できます。
通信通知: メッセージ通知をシステム メッセージに近づけます。
人々からのコミュニケーション(電話、メッセージ)は、通常の通知よりも真剣に受け止める必要があります。iOS 15 では、アプリが SiriKit インテントを介して通知を通信通知としてマークできるようになり、次のようなアップグレードされたエクスペリエンスが得られます。
- 送信者のアバターを表示
- タイトルと字幕の標準化とローカライゼーション
- Siri が AirPods、HomePod、CarPlay 上のコンテンツを自動的にアナウンスします
- フォーカスと通知の概要を理解できる (連絡先とのユーザーの対話履歴に基づく)
- システムの連絡先と関連付けて、共有シートやスポットライトの提案に表示します
実装は次のとおりですUNNotificationServiceExtensionで、使用するINSendMessageIntentまたはINStartCallIntent通知コンテンツを更新し、インタラクションを寄付します。
##詳細
通知アクションのアイコンを追加
(01:57)
let likeActionIcon = UNNotificationActionIcon(systemImageName: "hand.thumbsup")
let likeAction = UNNotificationAction(
identifier: "like-action",
title: "Like",
options: [],
icon: likeActionIcon
)
let commentActionIcon = UNNotificationActionIcon(templateImageName: "text.bubble")
let commentAction = UNTextInputNotificationAction(
identifier: "comment-action",
title: "Comment",
options: [],
icon: commentActionIcon,
textInputButtonTitle: "Post",
textInputPlaceholder: "Type here…"
)
let category = UNNotificationCategory(
identifier: "update-actions",
actions: [likeAction, commentAction],
intentIdentifiers: [],
options: []
)
キーポイント:
UNNotificationActionIconサポート体制 SFシンボル(systemImageName) またはアプリ内テンプレート画像 (templateImageName)UNTextInputNotificationActionこれは入力ボックスを使用した操作であり、コメントや返信のシナリオに適しています。- 通知を展開すると、アクションボタンの左側にアイコンが表示されます
割り込みレベルの設定
(08:19)
ローカル通知設定 パッシブレベル:
let content = UNMutableNotificationContent()
content.title = "Passive"
content.body = "I'm a passive notification, so I won't interrupt you."
content.interruptionLevel = .passive
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let request = UNNotificationRequest(
identifier: "passive-request-example",
content: content,
trigger: trigger
)
プッシュ通知設定 パッシブレベル:
{
"aps": {
"alert": {
"title": "Passive",
"body": "I'm a passive notification, so I won't interrupt you."
},
"interruption-level": "passive"
}
}
キーポイント:
interruptionLevelはいUNMutableNotificationContent新しいプロパティ- ペイロードのプッシュに使用されます
"interruption-level"キー、値は次のとおりです"passive"、"active"、"time-sensitive"、"critical" - 設定されていない場合のデフォルトは
active
一刻を争う通知
(11:13)
let content = UNMutableNotificationContent()
content.title = "Urgent"
content.body = "Your account requires attention."
content.interruptionLevel = .timeSensitive
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 0, repeats: false)
let request = UNNotificationRequest(
identifier: "time-sensitive-example",
content: content,
trigger: trigger
)
プッシュバージョン:
{
"aps": {
"alert": {
"title": "Urgent",
"body": "Your account requires attention."
},
"interruption-level": "time-sensitive"
}
}
キーポイント:
- Xcode の署名と機能で時間に敏感な通知をオンにする必要があります
- 時間に敏感な権限を乱用すると、ユーザーはアプリをオフにすることになります
- アカウントのセキュリティリマインダー、荷物の配達、薬のリマインダーなど、本当に緊急のシナリオに適しています。
コミュニケーション通知:メッセージ通知
(16:08)
存在するUNNotificationServiceExtensionプッシュ通知を次の場所で処理します。
func didReceive(
_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void
) {
let incomingMessageIntent: INSendMessageIntent = // 从 payload 解析
let interaction = INInteraction(intent: incomingMessageIntent, response: nil)
interaction.direction = .incoming
interaction.donate(completion: nil)
do {
let messageContent = try request.content.updating(from: incomingMessageIntent)
contentHandler(messageContent)
} catch {
// Handle error
}
}
キーポイント:
UNNotificationContentProvidingプロトコルはインテントと通知コンテンツをつなぐ架け橋ですinteraction.direction通知は次のとおりである必要があります.incomingdonate()ユーザーが誰と対話しているかを Siri に学習させて、フォーカスペネトレーションの推奨事項を最適化します。
INPersonal と INSendMessageIntent を作成する
(18:29)
let person = INPerson(
personHandle: handle,
nameComponents: nameComponents,
displayName: displayName,
image: image,
contactIdentifier: contactIdentifier,
customIdentifier: customIdentifier,
aliases: nil,
suggestionType: suggestionType
)
let intent = INSendMessageIntent(
recipients: [person2],
outgoingMessageType: .outgoingMessageText,
content: content,
speakableGroupName: speakableGroupName,
conversationIdentifier: conversationIdentifier,
serviceName: serviceName,
sender: person1,
attachments: nil
)
let interaction = INInteraction(intent: intent, response: nil)
interaction.direction = .incoming
キーポイント:
INPerson各パラメータについて (contactIdentifier、customIdentifier、imageなど)ユーザーエクスペリエンスが向上しますconversationIdentifier同じ会話の通知をグループ化するために使用されます- 送信者が合格しました
senderパラメータの指定は通知タイトルに表示されます
発信インテントを寄付する
(17:48)
ユーザーがアプリケーション内で積極的にメッセージを送信するときは、インテントも寄付する必要があります。
func sendMessage(...) {
let intent: INSendMessageIntent = // 创建 Intent
let interaction = INInteraction(intent: intent, response: nil)
interaction.direction = .outgoing
interaction.donate(completion: nil)
}
キーポイント:
- 発信された寄付は、Siri が Focus を通じてどの連絡先を提案するかを決定するのに役立ちます
- スパム電話による妨害を避けるため、送信された寄付のみが連絡先の提案に使用されます。
- Info.plist で必須
NSUserActivityTypes対応するインテント タイプを追加するか、インテント拡張機能を実装します。
重要ポイント
- さまざまなシナリオに適した割り込みレベルを選択します
- 対処方法: アプリ内のすべての通知を緊急度に応じて分類し、それぞれパッシブ、アクティブ、時間重視に設定します。
- 実行する価値がある理由: ユーザーが中断される回数を減らし、重要な通知の到着率を高めます。ユーザーは、「賢明な」アプリの通知権限を保持することに積極的です。
- 開始方法: 既存の通知を監査し、推奨事項と更新カテゴリをパッシブに変更し、セキュリティ リマインダーを時間制限に変更します。エントリーAPIは
UNMutableNotificationContent.interruptionLevel
- ソーシャル/メッセージング アプリケーションの通信通知を統合
- やるべきこと: アプリ内のプライベート メッセージ、グループ チャット、通話通知にアバターが表示され、Focus に侵入し、Siri によって通知されるようにします。
- 実行する価値がある理由: システムレベルのエクスペリエンスがアップグレードされ、ユーザーの認識は明らかです。システム連絡先と統合すると、アプリは共有シートとスポットライトの両方に表示されます
- 開始方法: 通知サービス拡張機能を追加します。
didReceive中国語での使用INSendMessageIntentお知らせ内容を更新します。同時に、フォアグラウンド ユーザーがメッセージを送信するときに送信インテントを寄付します。
- relevanceScore を使用して通知概要の並べ替えを最適化します
- 対処方法: 最も重要な通知が概要の先頭に表示されるように、通知の関連性スコアを設定します。
- 実行する価値がある理由: 通知の概要では複数の通知が折りたたまれ、スコアの高い通知のみが強調表示されます。
- 開始方法: 設定
UNMutableNotificationContent.relevanceScore、範囲は 0.0 ~ 1.0
- 通知アクションのアイコンを追加
- 何をすべきか: すべてのカスタム通知アクションを SF シンボル アイコンと一致させます。
- 実行する価値がある理由: アイコンはテキストよりも直感的で、ユーザーは読まなくても操作の意味を識別できます。
- 開始方法: 作成する
UNNotificationActionIcon(systemImageName:)そして通りますUNNotificationActionのコンストラクター
関連セッション
- Meet Focus — フォーカス モードの仕組みとその構成方法を学びます
- SiriKit の新機能 — SiriKit の新機能とインテント フレームワークの更新
- グループ アクティビティのカスタム エクスペリエンスを構築する — 複数人のリアルタイム コラボレーション エクスペリエンスを構築する
- コミュニケーション通知のデザイン — コミュニケーション通知のデザイン ガイドライン
コメント
GitHub Issues · utterances