我有一个带有按钮的应用程序,可以打开 Facebook 页面。它会检查用户是否安装了 Facebook 以及是否应在应用程序中打开该页面。如果没有安装,那么它只是用 Safari 打开页面。但是它不起作用。如果用户安装了 Facebook,我怀疑它与错误的地址有关:
var fbUrl = NSURL(string: "fb://facebook.com/FacebookPageName")!
var fbUrlWeb = NSURL(string: "https://www.facebook.com/FacebookPageName")!
if (UIApplication.sharedApplication().canOpenURL(fbUrl)) {
// Facebook App installed
UIApplication.sharedApplication().openURL(fbUrl)
} else {
// No Facebook App installed
UIApplication.sharedApplication().openURL(fbUrlWeb)
}
问题出在您的 Facebook 网址的格式上,因此请注意格式。我使用此扩展程序打开网址。您按照您希望它们尝试打开的顺序为它提供一组 url,它首先尝试第一个,如果失败则转到第二个,依此类推:
extension UIApplication {
class func tryURL(urls: [String]) {
let application = UIApplication.sharedApplication()
for url in urls {
if application.canOpenURL(NSURL(string: url)!) {
application.openURL(NSURL(string: url)!)
return
}
}
}
}
并用于:
UIApplication.tryURL([
"fb://profile/116374146706", // App
"http://www.facebook.com/116374146706" // Website if app fails
])
Swift 4 的[更新]:
extension UIApplication {
class func tryURL(urls: [String]) {
let application = UIApplication.shared
for url in urls {
if application.canOpenURL(URL(string: url)!) {
application.openURL(URL(string: url)!)
return
}
}
}
}
然后:
UIApplication.tryURL(urls: [
"fb://profile/116374146706", // App
"http://www.facebook.com/116374146706" // Website if app fails
])
iOS 10/Swift 5 的[更新]
extension UIApplication {
class func tryURL(urls: [String]) {
let application = UIApplication.shared
for url in urls {
if application.canOpenURL(URL(string: url)!) {
if #available(iOS 10.0, *) {
application.open(URL(string: url)!, options: [:], completionHandler: nil)
}
else {
application.openURL(URL(string: url)!)
}
return
}
}
}
}