问题
How can I open Facebook and Instagram app by tapping on a button in swift
? Some apps redirect to the Facebook app and open a specific page. How can I do the same thing?
I found it:
var url = NSURL(string: \"itms://itunes.apple.com/de/app/x-gift/id839686104?mt=8&uo=4\")
if UIApplication.sharedApplication().canOpenURL(url!) {
UIApplication.sharedApplication().openURL(url!)
}
but I have to know the app URL
. Other examples were in ObjectiveC
, which I don\'t know =/
回答1:
Take a look at these links, it can help you:
https://instagram.com/developer/mobile-sharing/iphone-hooks/
http://wiki.akosma.com/IPhone_URL_Schemes
Open a facebook link by native Facebook app on iOS
Otherwise, there is a quick example with Instagram for opening a specific profile (nickname: johndoe) here:
var instagramHooks = "instagram://user?username=johndoe"
var instagramUrl = NSURL(string: instagramHooks)
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/")!)
}
回答2:
Update for Swift 4 and iOS 10+
OK, there are two easy steps to achieve this in Swift 3:
First, you have to modify Info.plist
to list instagram
and facebook
with LSApplicationQueriesSchemes
. Simply open Info.plist
as a Source Code, and paste this:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>instagram</string>
<string>fb</string>
</array>
After that, you can open instagram
and facebook
apps by using instagram://
and fb://
. Here is a complete code for instagram and you can do the same for facebook, you can link this code to any button you have as an Action:
@IBAction func InstagramAction() {
let Username = "instagram" // Your Instagram Username here
let appURL = URL(string: "instagram://user?username=\(Username)")!
let application = UIApplication.shared
if application.canOpenURL(appURL) {
application.open(appURL)
} else {
// if Instagram app is not installed, open URL inside Safari
let webURL = URL(string: "https://instagram.com/\(Username)")!
application.open(webURL)
}
}
For facebook
, you can use this code:
let appURL = URL(string: "fb://profile/\(Username)")!
回答3:
In swift 3;
First you should add this on your Info.plist
Than you can use this code;
let instagramUrl = URL(string: "instagram://app")
UIApplication.shared.canOpenURL(instagramUrl!)
UIApplication.shared.open(instagramUrl!, options: [:], completionHandler: nil)
回答4:
You actually don't need to use a web and app URL anymore. The web URL will automatically open in the app if the user has it. Instagram or other apps implement this on their end as a Universal Link
Swift 4
func openInstagram(instagramHandle: String) {
guard let url = URL(string: "https://instagram.com/\(instagramHandle)") else { return }
if UIApplication.shared.canOpenURL(url) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(url)
}
}
}
回答5:
In swift 4:
Just change appURL and webURL :
twitter://user?screen_name=\(screenName)
instagram://user?screen_name=\(screenName)
facebook://user?screen_name=\(screenName)
- 'openURL' was deprecated in iOS 10.0:
let screenName = "imrankst1221"
let appURL = NSURL(string: "instagram://user?screen_name=\(screenName)")!
let webURL = NSURL(string: "https://twitter.com/\(screenName)")!
if UIApplication.shared.canOpenURL(appURL as URL) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(appURL as URL, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(appURL as URL)
}
} else {
//redirect to safari because the user doesn't have Instagram
if #available(iOS 10.0, *) {
UIApplication.shared.open(webURL as URL, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(webURL as URL)
}
}
回答6:
Based on accepted answer here is the way to do this more elegantly with Swift 4
UIApplication.tryURL([
"instagram://user?username=johndoe", // App
"https://www.instagram.com/johndoe/" // Website if app fails
])
And truly remember to add the scheme to allow the app to open. However even if you forget that instagram will open in Safari.
The tryUrl is an extension similar to presented here: https://stackoverflow.com/a/29376811/704803
来源:https://stackoverflow.com/questions/29902534/how-to-open-fb-and-instagram-app-by-tapping-on-button-in-swift