如何在原生iOS Facebook应用程序中使用对方的应用程序范围ID打开其个人资料页面

8

从Open Graph v2.0开始,应用程序不能再访问Facebook用户的实际ID,而是必须处理应用程序范围ID。这意味着在iOS中,url方案链接@"fb://profile/123456"不再起作用,因为我们需要用户的实际ID。

是否有一种方法可以在本机iOS Facebook应用程序中仅使用应用程序范围ID打开用户页面?

以下是我的当前代码,在本机iOS Facebook应用程序中会产生“页面未找到”错误。

NSString *link = [NSString stringWithFormat:@"fb://profile/%@", fbID];
NSURL *facebookURL = [NSURL URLWithString:link];
if ([[UIApplication sharedApplication] canOpenURL:facebookURL]) {
    [[UIApplication sharedApplication] openURL:facebookURL];
} else {
    NSString *link = [NSString stringWithFormat:@"http://facebook.com/%@", fbID];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:link]];
}
3个回答

14

根据这个文档,Facebook ID 就是应用范围内的用户ID。因此您可以使用相同的基于URL方案。尝试使用此请求打开用户资料:

fb://profile?app_scoped_user_id=%@

另外还应该考虑阅读这篇文章关于这个请求。毕竟,对我来说,您应该使用Safari来显示用户配置文件。


1
非常好用!但希望未来能够有文档记录这些功能 :) - Flying_Banana
4
我使用这个示例编写代码,但无论我插入其他人的ID,我总是只打开我的个人资料。(我测试了很多ID,但结果始终相同 - 只打开了我的个人资料)是否有其他人也遇到了同样的问题? - JuHong Jung
这个解决方案只会显示我的个人资料,就像@EdwardAnthony和@JuHong说的那样。使用Safari打开解决了这个问题:UIApplication.sharedApplication().openURL(url) - Alston
一样的问题,这个链接总是打开我的个人资料页面。如何在 Facebook 原生应用程序中打开其他人的个人资料? - Neelam Pursnani
谢谢你的提示。 - Winston Fale

1

Swift版本:

let appUrl = NSURL(string: "fb://profile?app_scoped_user_id=\(id)")!

            if UIApplication.sharedApplication().canOpenURL(appUrl) {
                UIApplication.sharedApplication().openURL(appUrl)
            } else {
                UIApplication.sharedApplication().openURL(NSURL(string: "https://www.facebook.com/app_scoped_user_id/\(id)")!)
            }

编辑:理论上这是可行的,但实际上,Facebook不允许第三方应用程序打开FB:// URL。


它对我也不起作用,每次都打开我的个人资料。 - Neelam Pursnani

1
这个URL方案可以打开用户的个人资料页面。请注意,它使用的是用户名而不是ID号码。
fb://profile?id=[username]

请先查看此链接 如何回答问题这个问题之前已经有人回答过了,显然你可以在此处添加你的答案。但是在回答之前需要理解一些要点。首先,不要添加与先前添加的相同代码或建议的答案。其次,如果用户非常明确地询问了问题及其解决方法,请不要添加过于复杂的答案。第三,如果您想就答案或问题提出任何建议,可以添加评论。 - always-a-learner
@ankitsuthar,很抱歉,你说这个问题以前已经有答案了,但我似乎找不到“正确”的答案。我曾经遇到同样的问题,当我最终找到正确的方法(据我所知,这里没有提到)时,我决定分享一下。这有问题吗? - Lyn
好的,那么请添加重要细节使其更有帮助。这样别人才能真正受益。@Lyn - always-a-learner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接