从iOS应用程序打开Facebook页面链接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从iOS应用程序打开Facebook页面链接相关的知识,希望对你有一定的参考价值。
我想将用户重定向到我的App的Facebook页面,所以我有以下代码:
[[UIApplication sharedApplication] openURL:
[NSURL URLWithString: @"https://facebook.com/myAppsPage"]];
如果设备上没有Facebook应用程序,这非常有用。然后在Safari中打开链接。
如果在设备上安装了Facebook应用程序,那么在执行上面的代码后Facebook应用程序打开,但它显示的是用户时间线,而不是我的应用页面。我试图改变@"fb://pages/myAppsPage"
和@"fb://profile/myAppsPage
的链接,但这再次打开了用户的时间表。
所以,我的问题是:如果没有Facebook应用程序,我如何在safari中打开我的应用程序页面,如果安装了这个应用程序,我怎么能在Facebook应用程序中打开我的应用页面。
您必须使用给定页面的Facebook ID而不是虚荣URL。要获取页面ID,请在以下URL输入页面的虚名,并复制“id”的值:
https://graph.facebook.com/yourappspage
获得id后,可以设置方法以使用canOpenURL方法检查是否安装了FB,并为这两种状态提供适当的内容:
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"]];
}
我很高兴找到skladek的答案,所以这是我的贡献:Swift +其他社交网络。
我发现我需要3个正斜杠用于推特,只有2个用于Facebook和Google+,我没有调查超过那个......
// 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的最后一个答案改变了页面方案(配置文件与之前相同)
page_id
现在是URL查询的一部分。因此,为了重定向到fb app,网址必须采用以下格式:
fb://page/?id='your_page_numeric_id'
还要确保在您的应用fb
中将Info.plist
方案列入白名单
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
</array>
如果有任何进一步的修改或您不知道您的Facebook页面的page_id
,您可以从您的Facebook网页源提取精确的ios fb
URL。
- 在Safari中打开您的Facebook页面
- 右键单击 - >检查元素
- 搜索
al:ios:url
你应该能够找到:
<meta property="al:ios:url" content="fb://page/?id='your_page_numeric_id'">
将此网址复制到您的应用中,然后致电:
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,您必须使用Info.plist中的LSApplicationQueriesSchemes键将应用程序将调用的URL列入白名单。
检查here。
<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>
经过多次测试后,我找到了最有效的解决方案之一:
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”根据您的喜好而有所不同......
好好享受!! :-)
斯威夫特2.3
对于代码,您可以使用此示例:
注意:如果你找不到facebook个人资料ID你可以使用以下网站来做(https://findmyfbid.com/)
func goFacebook() {
let profileID = "" //Here put profile id Example:'62260589592'
let facebookURL = NSURL(string: "fb://profile/(profileID)")!
if UIApplication.sharedApplication().canOpenURL(facebookURL) {
UIApplication.sharedApplication().openURL(facebookURL)
} else {
UIApplication.sharedApplication().openURL(NSURL(string: "https://www.facebook.com/PageName")!)
}
}
对于Info.plist,您需要设置以下参数:
注意:要在源模式下打开Info.plist
- 转到Info.plist文件并单击右键
- 选择“打开为”
- 选择“源代码”
- 在另一个上面输入代码
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
<string>fbapi</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fb-messenger-api</string>
</array>
以上是关于从iOS应用程序打开Facebook页面链接的主要内容,如果未能解决你的问题,请参考以下文章
如何从 iOS 上的本机 Facebook 应用程序在 Safari 中打开移动 webapp 链接?
ios App:如何打开 facebook 链接并确保它是在 safari 而不是在本机应用程序中打开的?