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

时间:2013-05-16 13:54:19

标签: 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应用程序中打开。

8 个答案:

答案 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网址。

  1. 在Safari中打开您的Facebook页面
  2. 右键单击 - &gt;检查元素
  3. 搜索al:ios:url
  4. 你应该能够找到:

    <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=4fb://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>