今回はiOS14から使用できるようになった、SKOverlayについて紹介したいと思います。
自分のリリースしている別アプリなどを表示させることができ、ストアに遷移させることでユーザがすぐにアプリ情報にアクセス、インストールが可能になる機能になります。
SKOverlayを実装するにはまず、StoreKitをimportします。
import StoreKit
UIWindowSceneを取得します。
let scene = view.window?.windowScene
表示する情報を設定します、今回表示するアプリは「自分で作る瞬間英作文」になります。
let config = SKOverlay.AppConfiguration(appIdentifier: "1400133600", position: .bottom)
appIdentifierで設定しているIDですが、アプリのページをブラウザで開いた時のURLから取得できます。
今回の「自分で作る瞬間英作文」であれば、ブラウザで開いた時のURLは
https://apps.apple.com/jp/app/id1400133600
になるので、末尾のid「1400133600」を引数に設定しています。
最後にSKOverlayを表示させます。
let overlay = SKOverlay(configuration: config) overlay.present(in: scene)
すると以下のように表示されます。
AppConfigurationのpositionを設定することで表示位置を選択できます。用意されている表示位置は2パターンで「bottom」と「bottomRaised」になり、「bottomRaised」を設定すると以下のような表示になります。
let config = SKOverlay.AppConfiguration(appIdentifier: "1400133600", position: .bottomRaised)
おそらくUITabBarControllerなどフッターにあるコンテンツに被らないように用意されてるものかと思われます。
SKOverlayはViewControllerではなくUIWindowSceneにpresentするためViewController破棄しても表示され続けます。画面遷移時など適切なタイミングで非表示にする必要があります。
guard let scene = view.window?.windowScene else { return } SKOverlay.dismiss(in: scene)
ちなみにSKOverlayはdelegateも用意されており、以下のようなタイミングを検知することができます。
extension ViewController: SKOverlayDelegate { // SKOverlayのロードが失敗した時に呼ばれる(不正なappIdentifierなど) func storeOverlayDidFailToLoad(_ overlay: SKOverlay, error: Error) { } // SKOverlayの表示開始前に呼ばれる func storeOverlayWillStartPresentation(_ overlay: SKOverlay, transitionContext: SKOverlay.TransitionContext) { } // SKOverlayの表示完了時に呼ばれる func storeOverlayDidFinishPresentation(_ overlay: SKOverlay, transitionContext: SKOverlay.TransitionContext) { } // SKOverlayが非表示開始前に呼ばれる func storeOverlayWillStartDismissal(_ overlay: SKOverlay, transitionContext: SKOverlay.TransitionContext) { } // SKOverlayが非表示完了時に呼ばれる func storeOverlayDidFinishDismissal(_ overlay: SKOverlay, transitionContext: SKOverlay.TransitionContext) { } }
リンクだけだと味気なかったのが、簡単にインストールが促せる機能ができて使いやすいと思います。レビューへの促しなどStoreKitはいい働きしてますね。