180
180

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOS 10 の Push通知 / ローカル通知 でできること

Last updated at Posted at 2016-06-20

iOS 10 から通知に関する2つのフレームワークが追加されます。

これらを使って新たにできるようになることをまとめました。

タイトル、サブタイトル、本文の3種類の文字列を表示できる

Screen Shot 2016-06-20 at 9.50.22 AM.png
(画像はWWDCセッションより)

メディアを添付できる (Media Attachments)

Screen Shot 2016-06-20 at 9.55.06 AM.png
(画像は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セッションより)

  • メディアの処理時間とファイルサイズに制限がある

通知条件を細かく設定できる

  • 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を作成できる

Screen Shot 2016-06-20 at 10.01.55 AM.png
(画像はWWDCセッションより)
薄い灰色の背景の部分がカスタムUIで、自由にレイアウトできる

  • リッチ通知 (Rich Notification) と呼ばれるもの

  • 通知をForceタッチすると表示される

  • インタラクションは不可

  • キーボードを表示させてテキスト入力させることは可能

    • テキスト入力した後にViewを更新して入力されたテキストを表示できる
  • 通知に付随する「アクションボタン」の表示、押下は可能

  • Info.plist に以下の設定項目がある

    • UNNotificationExtensionInitialContentSizeRatio
      • カスタムUIの縦横比
    • UNNotificationExtensionDefaultContentHidden
      • カスタムUIと一緒に、タイトル/サブタイトル/ボディ/メディアから成る通常の通知を表示するかどうか
  • Extensionを追加して実装

通知設定にアクセスできる

UNUserNotificationCenter.current().getNotificationSettings { (settings) in // ... }

(コードはWWDCセッションより)

参考

WWDC

ドキュメント

解説

180
180
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
180
180

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?