我不知道如何检查手机上是否安装了应用程序!或者在安装App时,打开应用程序,否则打开Appstore链接以下载应用程序。我正在使用 swift 3 。我想使用应用名称或捆绑包标识符来执行此操作。 谢谢!
答案 0 :(得分:12)
func openApp(appName:String) {
let appName = "instagram"
let appScheme = "/(appName)://app"
let appUrl = URL(string: appScheme)
if UIApplication.shared.canOpenURL(appUrl! as URL)
{
UIApplication.shared.open(appUrl!)
} else {
print("App not installed")
}
}
答案 1 :(得分:4)
在其他答案和评论之间,我得到的印象是提问者希望能够看到是否安装了任何给定的应用。
从iOS 9.0开始,这是不可能的。
iOS 9及更高版本的应用必须在Info.plist中包含请求的URL方案列表,然后才能使用canOpenURL:
。这是为了保护用户隐私,因为广告商以可侵权的方式滥用此功能。 (有关这些更改的详细信息,请参阅this excellent post。)
当然,该列表是静态的,在构建时间或提交到App Store后无法更改。如果Apple不喜欢你选择的那些,他们有权拒绝它。
我担心你在iOS 9.0及更高版本之内无法提出的问题是不可能的。
编辑:我还想明确一个应用程序的URL方案可能不一定与其名称完全匹配。 (这更像是一个命名错误的常量问题而不是功能问题。)曾经有一个已知的URI方案的巨大列表,每个都有文档,但是非常恰当和恰当,似乎托管它的wiki已经关闭了
答案 2 :(得分:1)
这对我有用(Swift 3.0)
应提供以下两个输入:
<YOUR APP URL>
:您要打开的应用的网址方案 func openApp() {
let appURL = NSURL(string: "<APP URL SCHEME>")
if UIApplication.shared.canOpenURL(appURL as! URL) {
print("Opening App...")
}else {
UIApplication.shared.openURL(NSURL(string: "<YOUR APP URL>")! as URL)
}
}
:App Itunes网址
.form-inline {
margin: 0 -3px;
}
.form-inline .form-group label,
.form-inline .form-group input,
.form-inline .form-group select {
margin: 0 3px;
}
答案 3 :(得分:1)
迅速4.1。一个开发人员可以在AppStore上拥有多个应用程序。因此,我需要检查用户是否已由同一开发人员安装了其他应用程序。我有其他应用程序的捆绑ID。尽管您可以使用 Appname 代替 Bundle ID 。因此,我按照以下步骤操作。
在当前应用中,在info.plist文件中添加Array类型的LSApplicationQueriesSchemes键。在其中输入要从应用程序打开的应用程序的包ID或应用程序名称。
其他应用程序应在该应用程序URL方案中具有其捆绑包ID或应用程序名称条目。
let app = UIApplication.shared let bundleID = "some.Bundle.Id://" if app.canOpenURL(URL(string: bundleID)!) { print("App is install and can be opened") let url = URL(string:bundleID)! if #available(iOS 10.0, *) { UIApplication.shared.open(url, options: [:], completionHandler: nil) } else { UIApplication.shared.openURL(url) } } else { print("App in not installed. Go to AppStore") }
URL_scheme:// or Bundle_Id://
如果已安装应用程序,它将显示带有应用程序名称的警报,以在应用程序中打开它。
答案 4 :(得分:0)
首先转到info.plist,添加LSApplicationQueriesSchemes添加项目并将instagram放在该项目上。现在这段代码将完美运行。
let appName = "instagram"
let appScheme = "\(appName)://"
let appUrl = URL(string: appScheme)
if UIApplication.shared.canOpenURL(appUrl! as URL)
{
UIApplication.shared.open(appUrl!)
} else {
print("App not installed")
}
答案 5 :(得分:0)
研究了这么多答案之后,我正在编写一个通用代码,它将对新用户有所帮助。如果您有两个移动应用程序,分别为App1和App2,则要在App2中检查是否已在其设备中安装了App1,请参见以下代码。
在App1中将此属性添加到info.plist文件中
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.companyName.App1</string>
<key>CFBundleURLSchemes</key>
<array>
<string>App1</string>
</array>
</dict>
</array>
在App2中将此属性添加到info.plist文件中
<key>LSApplicationQueriesSchemes</key>
<array>
<string>App1</string>
</array>
在App2中编写检查手机上是否已安装应用程序的方法!或在安装应用程序后,打开该应用程序,否则打开“ Appstore”链接以按以下方式下载该应用程序。
func checkAndOpenApp(){
let app = UIApplication.shared
let appScheme = "App1://app"
if app.canOpenURL(URL(string: appScheme)!) {
print("App is install and can be opened")
let url = URL(string:appScheme)!
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(url)
}
} else {
print("App in not installed. Go to AppStore")
if let url = URL(string: "https://apps.apple.com/us/app/App1/id1445847940?ls=1"),
UIApplication.shared.canOpenURL(url)
{
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(url)
}
}
}
}
我希望它能对某些人有所帮助。