Запуск App Store из приложения в Swift


Я создаю приложение, и у меня есть баннер, который продвигает мое другое приложение. Вот мой код:

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))
}

Однако, когда пользователь нажимает кнопку, он просто переносит их в магазин приложений, а не на конкретную страницу для моего приложения. Что я делаю не так?

8 16

8 ответов:

В вашем URL-адресе слишком много протоколов. Избавьтесь от https:, чтобы URL-адрес читался

itms-apps://itunes.apple.com/app/bars/id706081574

Просто следуя старым ответам, я не смог заставить его работать, поэтому здесь я публикую свое полное решение:

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

Используйте только короткое " itms://".

Для Swift 3 это фрагмент:

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

Я надеюсь, что это кому-то поможет.

Ура.

P.S. @Эрик Айя опередил время:)

Swift 3-XCode 8.2.1

UIApplication.shared.openURL(URL(string: "itms-apps://itunes.apple.com/app/id" + appStoreAppID)!)

У меня была такая проблема, но этот код просто работает на телефоне, а не на симуляторе. Поэтому проверьте этот код:

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")
}

Просто вы можете использовать эти функции в структуре утилиты для goto app страницы в app store также вы можете goto 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))
    }
}

Ссылка, которую вы пытаетесь открыть, недопустима-удалите из нее https: schema (или itms: - но я предлагаю первый вариант, чтобы избежать перенаправления)

Поскольку openURL устарел с iOS 10, используйте следующий код:

UIApplication.shared.open((URL(string: "itms://itunes.apple.com/app/" + appStoreAppID)!), options:[:], completionHandler: nil)