アプリの中で別アプリをダウンロードする
はじめに
Youtubeのアプリを使っていて広告をクリックしてしまった時に、アプリ内でAppleStoreを開いてダウンロードすることができるようだったので調べてみました。
SKStoreProductViewControllerというものがあるらしくこれを使えば簡単に実装できるようです。Swiftでの実装がなくObj-cで書かれたサンプルばかりだったのでちょっと苦戦しました。
SKStoreProductViewControllerの実装
やることはとてもシンプルでdelegateを設定してloadProductを呼び出すだけです。
import StoreKit
class ViewController: UIViewController, SKStoreProductViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .orange
let vc = SKStoreProductViewController()
vc.delegate = self
//oh!natto!のアプリID
let parameters = [SKStoreProductParameterITunesItemIdentifier: "1457049172"]
vc.loadProduct(withParameters: parameters) { [weak self] status, error -> Void in
guard let self = self else { return }
if status {
self.present(vc, animated: true)
} else {
if let error = error {
print("Error: \(error.localizedDescription)")
}
}
}
}
//ストアVCが閉じられた時に呼ばれる
func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) {
print("finish")
}
}
アプリIDの調べ方
リリースしているアプリをググって開くとURLの末尾がIDになっているのでそれをコピペしてSKStoreProductParameterITunesItemIdentifierのvalueに設定するだけ
ハマったポイント
当初loadProductを呼び出す際にシミュレータで検証していたんですが、シミュレータではイベントが呼ばれません!
アプリIDが何か間違っているのかなと思い時間を無駄にしました…
検証するときは実機でためしましょう!