【问题标题】:How to Programmatically check and open an existing app in - Swift 4如何以编程方式检查和打开现有应用程序 - Swift 4
【发布时间】:2018-01-03 07:00:14
【问题描述】:

我想检查我的手机中是否安装了应用程序。如果它已经安装,我想启动它。如果没有安装,我需要打开 Appstore 链接。

我可以从 url 打开 Appstore,

https://itunes.apple.com/us/app/stack-ar/id1269638287?mt=8

使用下面的代码,

let urlString = "https://itunes.apple.com/us/app/stack-ar/id1269638287?mt=8"
UIApplication.shared.open(URL(string: urlString)!, options: [:]) { (success) in

        }

如果已安装,如何打开应用程序?

【问题讨论】:

标签: ios swift app-store


【解决方案1】:

要从您的应用程序打开另一个应用程序,目标应用程序需要实现 URL 方案。一些应用程序记录了它们的 URL 方案,而另一些则没有。您可能需要询问目标应用程序的开发人员或查看Info.plist 文件。

如果应用没有实现 URL Scheme,则无法启动它(据我所知)。

如果它确实实现了 URL 方案,您需要在您的应用中将该方案列入白名单。您可以通过将 LSApplicationQueriesSchemes 添加到您的 Info.plist 来做到这一点,如下所示:

图片显示了与 Facebook 和 Twitter 对应的 URL Schemes 的白名单。根据您要打开的应用调整此设置。

完成后,您可以使用UIApplication.sharedApplication().canOpenURL(...) 检查应用是否已安装,并使用UIApplication.sharedApplication().openURL(...) 打开目标应用。

我还想建议使用SKStoreProductViewController 在 App Store 中显示应用,而不是打开 Safari。这样就可以直接在您的应用中呈现类似 App Store 的视图,而无需离开它。

【讨论】:

    【解决方案2】:

    使用 Url 方案打开第三方应用程序。

    var profile = "instagram://user?username=johndoe"
    var instagramUrl = NSURL(string: profile)
    
    if UIApplication.sharedApplication().canOpenURL(instagramUrl!) {  
        UIApplication.sharedApplication().openURL(instagramUrl!)
    
    } else {
        //redirect to safari because the user doesn't have Instagram
        UIApplication.sharedApplication().openURL(NSURL(string: "http://instagram.com/")!)
    }
    

    【讨论】:

    • 这不是一个正确的答案。
    • 网址方案只是从另一个应用程序打开第三方应用程序的一种方式。
    • 除非您将所需的应用列入白名单,否则它不会起作用。否则 canOpenURL(:) 将始终为假。你可以在这里找到更多。 developer.apple.com/documentation/uikit/uiapplication/…
    • 如何获取其他第三方应用的方案?
    • 一个应用程序甚至可能没有方案。要获得它,请询问开发人员或失败,您可以窥探它,但如果开发人员尚未发布它,那是一件非常偷偷摸摸的事情。这是您所说的特定应用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 2020-10-04
    相关资源
    最近更新 更多