我想将用户重定向到我的App的Facebook页面,所以我有以下代码:
[[UIApplication sharedApplication] openURL:
[NSURL URLWithString: @"https://facebook.com/myAppsPage"]];
如果设备上没有Facebook应用程序,这很有效。然后在Safari中打开链接。
如果在设备上安装了Facebook应用程序,那么在执行上面的代码后Facebook应用程序打开,但它显示的是用户时间线,而不是我的应用页面。我尝试将链接更改为@"fb://pages/myAppsPage"
和@"fb://profile/myAppsPage
,但这再次打开了用户时间轴。
所以,我的问题是:如果没有Facebook应用程序,我如何在safari中打开我的应用程序页面,如果安装了这个应用程序,我怎么能在Facebook应用程序中打开。
答案 0 :(得分:121)
您必须使用给定页面的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"]];
}
答案 1 :(得分:29)
我很高兴找到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()
答案 2 :(得分:26)
似乎自Facebook上一次回答改变了页面方案(个人资料与以前相同)
page_id
现在是网址查询的一部分。
因此,为了重定向到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
网址。
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)
}
应该做的工作......
答案 3 :(得分:11)
对于iOS 9,您必须使用Info.plist中的LSApplicationQueriesSchemes键将您的应用调出的网址列入白名单。
检查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>
答案 4 :(得分:2)
我刚刚找到了该URL方案fb://profile?id={userid/username/pageid}
,并且从2020年8月30日开始可以正常使用。
例如:fb://profile?id=4
或fb://profile?id=zuck
警告:由于使用此风险自负,因此Facebook开发人员文档中未记录。将来,Facebook应用程序可能会删除此URL方案,而不会发出任何警告和指示。
答案 5 :(得分:1)
After much testing I have found one of the most effective solutions:
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]);
}
Order of sentences "if else" vary to your liking ...
Enjoy it!! :-)
答案 6 :(得分:1)
// Swift 5,您可以使用此功能打开fb页面/个人资料
func openFacebookPage() {
let facebookURL = NSURL(string: "fb://profile/PageId")!
if UIApplication.shared.canOpenURL(facebookURL as URL) {
UIApplication.shared.open(facebookURL as URL)
} else {
UIApplication.shared.open(NSURL(string:
"https://www.facebook.com/PageName")! as URL)
}
}
//By Using PageId or name only
func openFacebookPage(pageID:String) {
let facebookURL = NSURL(string: "fb://profile/\(pageID)")!
if UIApplication.shared.canOpenURL(facebookURL as URL) {
UIApplication.shared.open(facebookURL as URL)
} else {
UIApplication.shared.open(NSURL(string: "https://www.facebook.com/\
(pageID)")! as URL)
}
}
//By Using Url only
func openFacebookPageURL(url:String) {
let facebookURL = NSURL(string: url)!
if UIApplication.shared.canOpenURL(facebookURL as URL) {
UIApplication.shared.open(facebookURL as URL)
} else {
UIApplication.shared.open(NSURL(string: url)! as URL)
}
}
答案 7 :(得分:0)
Swift 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文件,然后单击右键
- 选择&#34;打开为&#34;
- 选择&#34;源代码&#34;
- 在另一个
上面输入代码<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
<string>fbapi</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fb-messenger-api</string>
</array>