[iOS 10] iMessage アプリのライフサイクルについて
はじめに
iOS 10 から作成できるようになった「iMessage アプリ」の実装で中心となるのは MSMessagesAppViewController
クラスです。このクラスは UIViewController
のサブクラスであり、view を管理するイベントに加えて iMessage アプリ特有のイベントをハンドリングすることができます。
本記事では MSMessagesAppViewController
クラスのメソッドが呼ばれる順番をトレースし、iMessage アプリの処理の流れを整理していきます。
「iMessage アプリ」開発の基本事項については以下のカテゴリ内の他の記事などを参考にしてみてください!
[1] iMessage アプリがアクティブになるときのフロー
こちらは、Xcode からアプリを実行した場合などがあてはまります。
メソッドが呼ばれる順番は以下のようになりました。viewDidLoad()
と viewWillAppear(_:)
の間に willBecomeActive(with:)
と didBecomeActive(with:)
が呼ばれました。
viewDidLoad()
willBecomeActive(with:)
didBecomeActive(with:)
viewWillAppear(_:)
viewDidAppear(_:)
[2] iMessage アプリがアクティブでなくなるときのフロー
こちらは、画面中央のボタンを押して iMessage アプリを非表示にした場合などがあてはまります。
メソッドが呼ばれる順番は以下のようになりました。なぜか viewDidDisappear(_:)
は呼ばれませんでした。
viewWillDisappear(_:)
willResignActive(with:)
didResignActive(with:)
[3] メッセージがタップされた場合のフロー
自分のアプリで作成したメッセージがタップされたイベントは、MSMessagesAppViewController
のサブクラスでハンドリングできます。メッセージがタップされた時に iMessage アプリがアクティブかどうかによって、呼ばれるメソッドが異なります。
iMessage アプリがアクティブな場合
メソッドが呼ばれる順番は以下のようになりました。didSelect(_:conversation:)
メソッドの conversation
引数の selectedMessage
プロパティから、選択されたメッセージの情報を取得できます。
willSelect(_:conversation:)
didSelect(_:conversation:)
willTransition(to:)
didTransition(to:)
iMessage アプリがアクティブではない場合
メソッドが呼ばれる順番は以下のようになりました。呼ばれる順番やメソッドはパターン [1] の場合と同じです。
willBecomeActive(with:)
または didBecomeActive(with:)
メソッドの conversation
引数の selectedMessage
プロパティから、選択されたメッセージの情報を取得できます。
viewDidLoad()
willBecomeActive(with:)
didBecomeActive(with:)
viewWillAppear(_:)
viewDidAppear(_:)
さいごに
本記事では MSMessagesAppViewController
クラスのメソッドが呼ばれる順番をトレースし、iMessage アプリの処理の流れを整理してみました。iMessage アプリを思うように動かすための土台になりそうなのでしっかり押さえておきたいところですね。
iMessage アプリを作成中の方の参考になれば幸いです。