打开从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
中将fb
scheme列入白名单
<key>LSApplicationQueriesSchemes</key> <array> <string>fb</string> </array>
如果有任何进一步的修改,或者你不知道你的Facebook页面的page_id
,你可以从你的Facebook网页源提取精确的iOS fb
URL。
- 在Safari中打开您的Facebook页面
- 右键单击 – >检查元素
- search
al: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”因您的喜好而异
好好享受!! 🙂