アプリの中で別アプリをダウンロードする

はじめに

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が何か間違っているのかなと思い時間を無駄にしました…

検証するときは実機でためしましょう!