web-dev-qa-db-ja.com

SwiftでアプリからApp Storeを起動する

アプリを作成していますが、他のアプリを宣伝するバナーがあります。これは私のコードです:

var barsButton : UIButton = UIButton(frame: CGRectMake((self.view.bounds.width / 2) - 51, self.view.bounds.height - 100, 102, 30))
barsButton.setImage(UIImage(named: "Bars Icon 2.png"), forState: .Normal)
barsButton.addTarget(self, action: "openBarsLink", forControlEvents: UIControlEvents.TouchUpInside)

func openBarsLink() {
    var barsLink : String = "itms-apps:https://iTunes.Apple.com/app/bars/id706081574?mt=8"
    UIApplication.sharedApplication().openURL(NSURL.URLWithString(barsLink))
}

ただし、ユーザーがボタンを押すと、アプリの特定のページではなく、App Storeに移動します。何が悪いのですか?

18
user2397282

URLのプロトコルが多すぎます。取り除く https:したがって、URLは

itms-apps://iTunes.Apple.com/app/bars/id706081574

23
Chris Droukas

以前の回答をフォローしただけでは機能しなかったので、ここに完全な解決策を投稿します。

var url  = NSURL(string: "itms-apps://iTunes.Apple.com/app/bars/id706081574")
if UIApplication.sharedApplication().canOpenURL(url!) {
    UIApplication.sharedApplication().openURL(url!)
}
15
Andrej

短い「itms://」だけを使用してください。

Swiftの場合、これはスニペットです。

UIApplication.shared.openURL(URL(string: "itms://iTunes.Apple.com/app/id" + appStoreAppID)!)

これが誰かの役に立つことを願っています。

乾杯。

追伸@Eric Ayaは時代を先取りしていました:)

6
Sasho

Swift 3-XCode 8.2.1

UIApplication.shared.openURL(URL(string: "itms-apps://iTunes.Apple.com/app/id" + appStoreAppID)!)
3
ergunkocak

私はこの問題を抱えていましたが、このコードはシミュレータではなく電話でのみ機能します。だからこのコードを確認してください:

if let url = URL(string: "itms-apps://iTunes.Apple.com/app/id" + APP_ID ),
    UIApplication.shared.canOpenURL(url){
    UIApplication.shared.openURL(url)
}else{
    //Just check it on phone not simulator!
    print("Can not open")
}
3
reza_khalafi

単にこれらの関数をユーティリティ構造体で使用して、アプリストアのgoto appページに移動することもできますrate appに直接移動することもできます:

static func gotoApp(appID: String, completion: ((_ success: Bool)->())? = nil) {
    let appUrl = "itms-apps://iTunes.Apple.com/app/id\(appID)"

    gotoURL(string: appUrl, completion: completion)
}

static func rateApp(appId: String, completion: ((_ success: Bool)->())? = nil) {
    //let appUrl = "itms-apps://iTunes.Apple.com/app/" + appId
    let appUrl = "https://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=\(appId)&pageNumber=0&sortOrdering=2&type=Purple+Software&mt=8"
    //TODO: use &action=write-review for opening review directly
    print("app review URL: ", appUrl)

    gotoURL(string: appUrl, completion: completion)
}

static func gotoURL(string: String, completion: ((_ success: Bool)->())? = nil) {
    print("gotoURL: ", string)
    guard let url = URL(string: string) else {
        print("gotoURL: invalid url", string)
        completion?(false)
        return
    }
    if #available(iOS 10, *) {
        UIApplication.shared.open(url, options: [:], completionHandler: completion)
    } else {
        completion?(UIApplication.shared.openURL(url))
    }
}
3
Amr Lotfy

開こうとしているリンクは無効です-https:スキーマを削除してください(またはitms:-リダイレクトを避けるために最初のオプションをお勧めします)

1
mlepicki

OpenURLはiOS 10で非推奨になっているため、以下のコードを使用します。

UIApplication.shared.open((URL(string: "itms://iTunes.Apple.com/app/" + appStoreAppID)!), options:[:], completionHandler: nil)
1
iVarun