打开从iOS应用程序的Facebook页面的链接

我想redirect用户到我的应用程序的Facebook页面,所以我有以下代码:

[[UIApplication sharedApplication] openURL: [NSURL URLWithString: @"https://facebook.com/myAppsPage"]]; 

如果设备上没有Facebook应用程序,这个工程很好。 然后链接在Safari中打开。

如果在设备上安装了Facebook应用程序,那么执行上面的代码Facebook应用程序打开后,它显示的是用户的时间表,而不是我的应用程序的页面。 我试图改变链接到@"fb://pages/myAppsPage"@"fb://profile/myAppsPage ,但是这又打开了用户的时间线。

所以,我的问题是:如何在safari中打开我的应用程序页面,如果没有Facebook应用程序,或者在Facebook应用程序中(如果已安装)。

您必须使用给定页面的Facebook ID而不是虚荣URL。 要获取页面ID,请在以下URL中input页面的虚名,并复制“id”的值:

https://graph.facebook.com/yourappspage

一旦你有了id,你可以设置方法来检查FB是否使用canOpenURL方法安装,并为两种状态提供适当的内容:

 NSURL *facebookURL = [NSURL URLWithString:@"fb://profile/113810631976867"]; if ([[UIApplication sharedApplication] canOpenURL:facebookURL]) { [[UIApplication sharedApplication] openURL:facebookURL]; } else { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://facebook.com"]]; } 

我很高兴findskladek的答案,所以这是我的贡献:Swift +其他社交networking。

我发现我需要3个正反斜杠,而Facebook和Google+只有2个,我没有调查更多…

 // Go to https://graph.facebook.com/PageName to get your page id func openFacebookPage() { let facebookURL = NSURL(string: "fb://profile/PageId")! if UIApplication.sharedApplication().canOpenURL(facebookURL) { UIApplication.sharedApplication().openURL(facebookURL) } else { UIApplication.sharedApplication().openURL(NSURL(string: "https://www.facebook.com/PageName")!) } } func openTwitterProfile() { let twitterURL = NSURL(string: "twitter:///user?screen_name=USERNAME")! if UIApplication.sharedApplication().canOpenURL(twitterURL) { UIApplication.sharedApplication().openURL(twitterURL) } else { UIApplication.sharedApplication().openURL(NSURL(string: "https://twitter.com/USERNAME")!) } } func openGooglePlusPage() { let googlePlusURL = NSURL(string: "gplus://plus.google.com/u/0/PageId")! if UIApplication.sharedApplication().canOpenURL(googlePlusURL) { UIApplication.sharedApplication().openURL(googlePlusURL) } else { UIApplication.sharedApplication().openURL(NSURL(string: "https://plus.google.com/PageId")!) } } 

尝试重构:

 struct SocialNetworkUrl { let scheme: String let page: String func openPage() { let schemeUrl = NSURL(string: scheme)! if UIApplication.sharedApplication().canOpenURL(schemeUrl) { UIApplication.sharedApplication().openURL(schemeUrl) } else { UIApplication.sharedApplication().openURL(NSURL(string: page)!) } } } enum SocialNetwork { case Facebook, GooglePlus, Twitter, Instagram func url() -> SocialNetworkUrl { switch self { case .Facebook: return SocialNetworkUrl(scheme: "fb://profile/PageId", page: "https://www.facebook.com/PageName") case .Twitter: return SocialNetworkUrl(scheme: "twitter:///user?screen_name=USERNAME", page: "https://twitter.com/USERNAME") case .GooglePlus: return SocialNetworkUrl(scheme: "gplus://plus.google.com/u/0/PageId", page: "https://plus.google.com/PageId") case .Instagram: return SocialNetworkUrl(scheme: "instagram://user?username=USERNAME", page:"https://www.instagram.com/USERNAME") } } func openPage() { self.url().openPage() } } 

现在你可以打电话给:

 SocialNetwork.Twitter.openPage() 

似乎自上次回答Facebook已经改变了页面的scheme(configuration文件与以前相同)

page_id现在是URL查询的一部分。 所以为了redirect到fb应用程序,url必须采用以下格式:

 fb://page/?id='your_page_numeric_id' 

另外请确保在您的应用程序Info.plist中将fbscheme列入白名单

 <key>LSApplicationQueriesSchemes</key> <array> <string>fb</string> </array> 

如果有任何进一步的修改,或者你不知道你的Facebook页面的page_id ,你可以从你的Facebook网页源提取精确的iOS fb URL。

  1. 在Safari中打开您的Facebook页面
  2. 右键单击 – >检查元素
  3. searchal:ios:url

你应该能够find:

 <meta property="al:ios:url" content="fb://page/?id='your_page_numeric_id'"> 

将此URL复制到您的应用程序中,然后调用:

 guard let facebookURL = NSURL(string: "fb://page/?id='your_page_numeric_id'") else { return } if (UIApplication.sharedApplication().canOpenURL(facebookURL)) { UIApplication.sharedApplication().openURL(facebookURL) } else { guard let webpageURL = NSURL(string: "http://facebook.com/yourPage/") else { return } UIApplication.sharedApplication().openURL(webpageURL) } 

应该做这个工作。

对于iOS 9,您必须将应用程序调用的url列入白名单,以使用Info.plist中的LSApplicationQueriesSchemes项。

在这里检查。

 <key>LSApplicationQueriesSchemes</key> <array> <string>fb</string> <string>fbapi</string> <string>fbauth2</string> <string>fbshareextension</string> <string>fb-messenger-api</string> <string>twitter</string> <string>whatsapp</string> <string>wechat</string> <string>line</string> <string>instagram</string> <string>kakaotalk</string> <string>mqq</string> <string>vk</string> <string>comgooglemaps</string> </array> 

经过多次testing,我find了最有效的解决scheme之一:

 NSString *facebookID = @"XXXXXXXXXX"; NSString *facebookURL = @"www.facebook.com/XXXXXXXX"; NSURL *urlModal = [NSURL URLWithString:[NSString stringWithFormat:@"fb://facewebmodal/f?href=%@", facebookURL]]; NSURL *urlWithID = [NSURL URLWithString:[NSString stringWithFormat:@"fb://page/%@", facebookID]]; // or "fb://profile/%@" or another type of ID NSURL *url = [NSURL URLWithString:facebook_url]; if(facebookID && !facebookID.isEmpty && [[UIApplication sharedApplication] canOpenURL:urlWithID]) { // open facebook app with facebookID [[UIApplication sharedApplication] openURL:urlWithID]; } else if (facebookURL && !facebookURL.isEmpty && [[UIApplication sharedApplication] canOpenURL:urlModal]) { // open facebook app with facebookUrl [[UIApplication sharedApplication] openURL:urlModal]; } else if (![[UIApplication sharedApplication] openURL:url]) { // somehow open NSLog(@"%@%@",@"Failed to open url:",[url description]); } 

句子的顺序“if else”因您的喜好而异

好好享受!! 🙂