从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。

  1. 在Safari中打开您的Facebook页面
  2. 右键单击 - >检查元素
  3. 搜索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 页面

如何从 iOS 上的本机 Facebook 应用程序在 Safari 中打开移动 webapp 链接?

在特定页面上打开 facebook iOS 应用

ios App:如何打开 facebook 链接并确保它是在 safari 而不是在本机应用程序中打开的?

按下按钮时打开 Facebook 应用程序页面。斯威夫特 5

到 Facebook 页面的深层链接