iOS 10 から通知に関する2つのフレームワークが追加されます。
これらを使って新たにできるようになることをまとめました。
タイトル、サブタイトル、本文の3種類の文字列を表示できる
(画像はWWDCセッションより)
今までは表示する文字列に種別はなかった- 新たにサブタイトル (
subtitle
) を指定できるようになった- タイトル (
title
) は iOS 8.2 から指定可能 (ただし表示されない場合があるらしい) - cf. iOS 10などで使えるようになるUserNotificationsフレームワークへの所感 - Qiita
- タイトル (
メディアを添付できる (Media Attachments)
(画像はWWDCセッションより)
-
画像、動画、音声 が指定可能
-
Forceタッチで拡大表示
-
メディアのURLを指定する
-
UNNotificationAttachment にURL指定
-
メインBundle内のメディアも可
-
Push通知の場合はまずメディアのURLを端末に通知し、後述する Notification Service Extension を使ってURLを取り出してから UNNotificationAttachment に指定する必要あり
-
より詳しく: iOS 10 で画像つきの Notification を配信する - Qiita
public class NotificationService: UNNotificationServiceExtension { override public func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: (UNNotificationContent) -> Void) { let fileURL = // ... let attachment = UNNotificationAttachment(identifier: "image", url: fileURL, options: nil) let content = request.content.mutableCopy as! UNMutableNotificationContent content.attachments = [ attachment ] contentHandler(content) } }
(コードはWWDCセッションより)
-
-
メディアの処理時間とファイルサイズに制限がある
- ファイルサイズについては UNNotificationAttachment に記述あり
通知条件を細かく設定できる
- Push通知で任意のタイミングで
- ローカル通知
- 時間間隔を指定 (リピート設定可)
- 日時を指定 (リピート設定可 i.e. 指定したDateComponentsに一致したら何度でも)
- 位置情報を指定
フォアグラウンドでシステムの通知を表示できる
- 今まではアプリがフォアグラウンドだと、そのアプリの通知が届いてもシステムが通知を表示してくれなかった
- そのため通知を受け取ったら独自のAlertを表示するなどの実装が必要だった
- 表示する通知の内容を設定できる
- alert, sound, badge のうち表示したいものだけを指定できる
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler handlerBlock:
(UNNotificationPresentationOptions) -> Void) {
// Roll banner and sound alert
handlerBlock([.alert, .sound])
}
(コードはWWDCセッションより)
一度登録した通知を更新できる
- 未配信/配信済みいずれの通知も操作可能
- 配信済みで通知センターに表示されている通知を更新した場合、通知センターの表示も更新される
Push通知を受け取ってから表示するまでの間に通知データを操作できる
-
例えば、暗号化したメッセージをPush通知し、端末で復号することで end-to-end の暗号化が可能になる
-
Extensionを追加して実装
カスタムUIを作成できる
(画像はWWDCセッションより)
薄い灰色の背景の部分がカスタムUIで、自由にレイアウトできる
-
リッチ通知 (Rich Notification) と呼ばれるもの
-
通知をForceタッチすると表示される
3Dタッチに対応していないデバイスでも可能になる? (iOS 10 rich notifications will come to devices without 3D Touch, Apple tells developers)- 3Dタッチ未対応端末の場合
- ロック画面、通知一覧画面: 左へスワイプ -> 「表示」をタップ
- 画面上部に通知が来た場合: 下へ引き下げる
-
インタラクションは不可
-
キーボードを表示させてテキスト入力させることは可能
- テキスト入力した後にViewを更新して入力されたテキストを表示できる
-
通知に付随する「アクションボタン」の表示、押下は可能
-
Info.plist に以下の設定項目がある
-
UNNotificationExtensionInitialContentSizeRatio
- カスタムUIの縦横比
-
UNNotificationExtensionDefaultContentHidden
- カスタムUIと一緒に、タイトル/サブタイトル/ボディ/メディアから成る通常の通知を表示するかどうか
-
-
Extensionを追加して実装
通知設定にアクセスできる
UNUserNotificationCenter.current().getNotificationSettings { (settings) in // ... }
(コードはWWDCセッションより)
- アプリ内から通知に関するさまざまな設定にアクセスできる
- e.g. 通知許可設定
- 取得できる設定情報の詳細についてはドキュメントを参照のこと
- より詳しく: iOS 10でついに通知許可ダイアログの操作をハンドリングできるようになったよ - Qiita
参考
WWDC
- Introduction to Notifications - WWDC 2016 - Videos - Apple Developer
- Advanced Notifications - WWDC 2016 - Videos - Apple Developer
ドキュメント
- UserNotifications - Apple Developer Documentation
- UserNotificationsUI - Apple Developer Documentation
解説