【问题标题】:Open a facebook link by native Facebook app on iOS在 iOS 上通过本机 Facebook 应用打开 Facebook 链接
【发布时间】:2012-05-12 01:55:32
【问题描述】:

如果 iPhone 上安装了原生 Facebook 应用程序。如何从我的应用程序打开 Facebook 链接到本机 Facebook 应用程序。 Safari打开的情况下,链接同:

http://www.facebook.com/AlibabaUS

谢谢。

【问题讨论】:

  • 您的方式不适用于新的 FB 应用程序(2012 年 8 月)... fb://profile/ 可以
  • 要补充@yonix 所说的内容,您可以通过转到graph.facebook.com/AlibabaUS 找到页面ID。即使您想要一个页面,也请在 URL 中使用“个人资料”。此外,如果您认为用户可能没有安装 FB 应用程序,请在 openURL: 之前调用 canOpenURL:

标签: iphone ios xcode facebook


【解决方案1】:

以下是 Facebook 应用程序使用的一些方案,源链接上还有很多:

示例

NSURL *url = [NSURL URLWithString:@"fb://profile/<id>"];
[[UIApplication sharedApplication] openURL:url];

方案

fb://profile – 打开 Facebook 应用到用户的个人资料

fb://friends – 打开 Facebook 应用到好友列表

fb://notifications – 打开 Facebook 应用程序到通知列表 (注意:此 URL 似乎存在错误。通知页面打开。但是,无法导航到 Facebook 中的其他任何地方应用程序)

fb://feed – 打开 Facebook 应用到新闻源

fb://events – 打开 Facebook 应用程序到活动页面

fb://requests – 打开 Facebook 应用到请求列表

fb://notes – 打开 Facebook 应用程序到 Notes 页面

fb://albums – 打开 Facebook 应用到相册列表

如果在打开此网址之前您想检查用户是否使用 facebook 应用程序,您可以执行以下操作(如下面的另一个答案中所述):

if ([[UIApplication sharedApplication] canOpenURL:nsurl]){
    [[UIApplication sharedApplication] openURL:nsurl];
}
else {
    //Open the url as usual
}

来源

http://wiki.akosma.com/IPhone_URL_Schemes#Facebook

【讨论】:

  • 我可以通过登录在 safari 中打开此网址吗?我在整个应用程序中使用 Facebook。我已经登录了 Facebook。但是,如果我用 safari 打开 Facebook url 页面。它再次要求登录。我该如何解决这个问题?。
  • 请注意,facebook 不正式支持方案,它们可能随时更改/停止工作。
  • 即使我知道 id 是正确的,我仍然找不到页面。知道这是为什么吗?
  • 我们还需要在 iOS 9 的Info.plist 中添加白名单才能使其正常工作。看到这个useyourloaf.com/blog/querying-url-schemes-with-canopenurl.html
  • 我做了同样的事情,但它不适用于包含视频的帖子。它转到 Facebook 应用程序,但什么也没显示。例如这个10153231379946729。有什么想法吗?
【解决方案2】:

这将在 Safari 中打开 URL:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.facebook.com/comments.php?href=http://wombeta.jiffysoftware.com/ViewWOMPrint.aspx?WPID=317"]];

对于 iphone,如果使用以 fb:// 开头的 url 安装,您可以启动 Facebook 应用程序

更多信息可以在这里找到:http://iphonedevtools.com/?p=302也在这里:http://wiki.akosma.com/IPhone_URL_Schemes#Facebook

从上述网站窃取:

fb://profile – Open Facebook app to the user’s profile
fb://friends – Open Facebook app to the friends list
fb://notifications – Open Facebook app to the notifications list (NOTE: there appears to be a bug with this URL. The Notifications page opens. However, it’s not possible to navigate to anywhere else in the Facebook app)
fb://feed – Open Facebook app to the News Feed
fb://events – Open Facebook app to the Events page
fb://requests – Open Facebook app to the Requests list
fb://notes - Open Facebook app to the Notes page
fb://albums – Open Facebook app to Photo Albums list

要启动上述 URL:

NSURL *theURL = [NSURL URLWithString:@"fb://<insert function here>"];
[[UIApplication sharedApplication] openURL:theURL];

【讨论】:

  • 模拟器6.1可以签到吗?
  • 您不能在模拟器上添加任何应用程序。这就是为什么它不会在模拟器上运行
  • 看起来在 iOS 7 中 http facebook URL 会在本机 Facebook 应用程序中打开,即使它们不起作用(例如,使用别名而不是 UID)。我可能应该提交一个雷达。
【解决方案3】:

要添加 yonix 的评论作为答案,旧的fb://page/… URL 不再有效。显然它已被 fb://profile/… 取代,即使页面不是个人资料。

【讨论】:

  • 我正在尝试,但在加载 FB 应用程序后,我发现页面未找到。不知道为什么
【解决方案4】:

我在 MonoTouch 中使用以下方法进行了此操作,我确信纯基于 Obj-C 的方法不会有太大不同。我在一个有时会更改 URL 的类中使用它,这就是为什么我没有将它放在 if/elseif 语句中。

NSString *myUrls = @"fb://profile/100000369031300|http://www.facebook.com/ytn3rd";
NSArray *urls = [myUrls componentsSeparatedByString:@"|"];
for (NSString *url in urls){
    NSURL *nsurl = [NSURL URLWithString:url];
    if ([[UIApplication sharedApplication] canOpenURL:nsurl]){
        [[UIApplication sharedApplication] openURL:nsurl];
        break;
    }
}

在您的应用更改为 Safari/Facebook 之前,并不总是调用中断。我假设您的程序会停在那里并在您返回时调用它。

【讨论】:

  • 为该编辑干杯。那是我最初发布的monotouch代码的obj-c代码。
【解决方案5】:

只需使用https://graph.facebook.com/(your_username或页面名称)获取您的页面ID,然后您就可以看到所有拘留和您的ID

在您的 IOS 应用使用后:

 NSURL *url = [NSURL URLWithString:@"fb://profile/[your ID]"];
 [[UIApplication sharedApplication] openURL:url];

【讨论】:

  • 感谢图表网址!很有用
  • 这是拼图中的一个重要部分。谢谢!
  • 它不起作用。{错误:{消息:“请求此资源需要访问令牌。”,类型:“OAuthException”,代码:104,fbtrace_id:“AlTl1RaNO9b”}}跨度>
  • 这对我来说在 iOS 9 上运行良好,但在 iOS 8 和 iOS 10 上它只是打开 Facebook 应用程序而不转到我的页面
【解决方案6】:

我知道这个问题很老,但为了支持上述答案,我想分享我的工作代码。 只需将这两个方法添加到任何类。代码检查是否安装了 facebook 应用程序,如果未安装,则在浏览器中打开 url。如果在尝试查找 profileId 时出现任何错误,页面将在浏览器中打开。只需将 url(例如,http://www.facebook.com/AlibabaUS)传递给 openUrl:,它就会发挥所有作用。希望它可以帮助某人!。

注意:UrlUtils 是为我提供代码的类,您可能需要将其更改为其他内容以满足您的需求。

+(void) openUrlInBrowser:(NSString *) url
{
    if (url.length > 0) {
        NSURL *linkUrl = [NSURL URLWithString:url];
        [[UIApplication sharedApplication] openURL:linkUrl];
    }
}
+(void) openUrl:(NSString *) urlString
{

    //check if facebook app exists
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) {

        // Facebook app installed
        NSArray *tokens = [urlString componentsSeparatedByString:@"/"];
        NSString *profileName = [tokens lastObject];

        //call graph api
        NSURL *apiUrl = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@",profileName]];
        NSData *apiResponse = [NSData dataWithContentsOfURL:apiUrl];

        NSError *error = nil;
        NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:apiResponse options:NSJSONReadingMutableContainers error:&error];

        //check for parse error
        if (error == nil) {

            NSString *profileId = [jsonDict objectForKey:@"id"];

            if (profileId.length > 0) {//make sure id key is actually available
                NSURL *fbUrl = [NSURL URLWithString:[NSString stringWithFormat:@"fb://profile/%@",profileId]];
                [[UIApplication sharedApplication] openURL:fbUrl];
            }
            else{
                [UrlUtils openUrlInBrowser:urlString];
            }

        }
        else{//parse error occured
            [UrlUtils openUrlInBrowser:urlString];
        }

    }
    else{//facebook app not installed
        [UrlUtils openUrlInBrowser:urlString];
    }

}

【讨论】:

  • 这将不再起作用:"message": "(#803) Cannot query users by their username (user.name)"
【解决方案7】:

如果 Facebook 应用程序已登录,则在执行以下代码时将打开该页面。如果Facebook应用程序在执行代码时没有登录,那么用户将被重定向到Facebook应用程序登录,然后连接后Facebook不会被重定向到页面!

NSURL *fbNativeAppURL = [NSURL URLWithString:@"fb://page/yourPageIDHere"] [[UIApplication sharedApplication] openURL:fbNativeAppURL]

【讨论】:

    【解决方案8】:

    斯威夫特 3

    if let url = URL(string: "fb://profile/<id>") {
            if #available(iOS 10, *) {
                UIApplication.shared.open(url, options: [:],completionHandler: { (success) in
                    print("Open fb://profile/<id>: \(success)")
                })
            } else {
                let success = UIApplication.shared.openURL(url)
                print("Open fb://profile/<id>: \(success)")
            }
     }
    

    【讨论】:

    • 如何获取这个id?
    • 这个链接可能对你有帮助developers.facebook.com/docs/apps/…
    • 当您创建 fb 帐户时,fb 创建用户的唯一 ID。上面的例子我们有什么我们在本机 fb 应用程序上打开用户配置文件
    • 好的。我想要的是,如何在 facebook 本机应用程序中打开其他人的个人资料?我搜索了很多但没有得到任何东西。问题详情在这里:stackoverflow.com/questions/51207496/…
    • 你在使用 fb sdk 吗?
    【解决方案9】:

    今天刚刚验证了这一点,但如果您尝试打开 Facebook 页面,您可以使用 "fb://page/{Page ID}" p>

    页面 ID 可以在页面底部附近的 about 部分中找到。

    特定于我的用例,在 Xamarin.Forms 中,如果可用,您可以使用此 sn-p 在应用中打开,否则在浏览器中打开。

    Device.OpenUri(new Uri("fb://page/{id}"));

    【讨论】:

      【解决方案10】:

      2020年答案

      只需打开网址。 Facebook 会自动注册深层链接。

      let url = URL(string:"https://www.facebook.com/TheGoodLordAbove")!
      UIApplication.shared.open(url,completionHandler:nil)
      

      如果已安装,则会在 facebook 应用中打开,否则会在默认浏览器中打开

      【讨论】:

        【解决方案11】:

        以前的方法fb://profile/[ID] 不起作用。

        试试fb://profile?id=[ID]

        使用示例:

        // Open Profile or page
        // To open in Application
        if UIApplication.shared.canOpenURL(URL(string: "fb://profile?id=vikramchaudhary.ios")!) {
            UIApplication.shared.open(URL(string: "fb://profile?id=vikramchaudhary.ios")!, options: [:], completionHandler: nil)
        } else {
            // To open in safari
            UIApplication.shared.open(URL(string: "https://facebook.com/vikramchaudhary.ios/")!, options: [:], completionHandler: nil)
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-09-14
          • 1970-01-01
          • 1970-01-01
          • 2012-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多