【问题标题】:Open link to Facebook page from iOS app从 iOS 应用程序打开 Facebook 页面的链接
【发布时间】:2013-05-16 13:54:18
【问题描述】:

我想将用户重定向到我的应用程序的 Facebook 页面,所以我有以下代码:

[[UIApplication sharedApplication] openURL:
    [NSURL URLWithString: @"https://facebook.com/myAppsPage"]];

如果设备上没有 Facebook 应用程序,这将非常有效。然后链接会在 Safari 中打开。

如果设备上安装了 Facebook 应用程序,则在执行上述代码后,Facebook 应用程序会打开,但它显示的是用户时间线,而不是我的应用程序页面。我尝试将链接更改为@"fb://pages/myAppsPage"@"fb://profile/myAppsPage,但这再次打开了用户时间线。

所以,我的问题是:如果没有 Facebook 应用程序,我如何在 safari 中打开我的应用程序页面,或者如果安装了 Facebook 应用程序,如何打开我的应用程序页面。

【问题讨论】:

    标签: ios facebook


    【解决方案1】:

    您必须使用给定页面的 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"]];
    }
    

    【讨论】:

    • 没问题。请注意,URL 方案几乎完全没有文档记录,这取决于 Facebook 是否继续支持此功能。他们可以在任何给定时间对其进行重大更改。
    • 感谢fb://profile/xxxxx 在当前版本的 Facebook 应用程序中运行良好的重要提示。一直在互联网上搜索解决方案,建议使用fb://page/xxxxx,它不起作用,没有加载页面,可能是旧版本的 Facebook 应用程序。
    • 确认这在 iOS7 和 iOS8 上仍然可以成功运行。
    • 这不再适用于 Facebook 弃用 ID。
    • 在 iOS 9 中,请记住通过在 Info.plist 中添加数组键 LSApplicationQueriesSchemes 并将项目 fb 作为数组中的字符串项来将方案列入白名单。
    【解决方案2】:

    似乎自上次回答以来,Facebook 已经更改了页面方案(个人资料与以前相同)

    page_id 现在是 URL 查询的一部分。 因此,为了重定向到 fb 应用程序,url 必须采用以下格式:

    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'">
    

    将此 URL 复制到您的应用中,然后调用:

    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)
    }
    

    应该做的工作......

    【讨论】:

    • 因为这个答案已经有一年多了:我可以确认这个方法(在我的例子中是 fb://event?id=)在这个评论中有效。在 iOS 10 和最新的 Facebook 应用版本上。
    • 不知何故它对我不起作用,现在是 2 月 6 日,哈哈;它只打开我当前登录的我自己的页面..
    • 确认适用于 iOS 10。正如 OP 所述,您需要在 Safari 中打开您的 FB 页面以获取正确的al:ios:url
    • 寻找al:ios:url 财产的秘密!我只是用它来查找如何深度链接 Facebook 组(不是页面)。欢呼
    【解决方案3】:

    我很高兴找到 skladek 的答案,所以这是我的贡献:Swift + 其他社交网络。

    我发现 twitter 需要 3 个正斜杠,而 Facebook 和 Google+ 只需要 2 个,我没有调查更多……

    // Go to https://graph.facebook.com/PageName to get your page id
    func openFacebookPage() {
        let facebookURL = NSURL(string: "fb://profile?id=PageName")!
        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()
    

    【讨论】:

    • 这似乎不起作用,因为网址。我必须将网址从“fb:///profile/PageId”更改为“fb://profile/PageId”
    • 感谢@NutchaphonRewik 的反馈,我最终使用 // 而不是 /// 用于 fb,但忘记编辑我的答案。现在已经更正了。
    • 绝对是最佳答案!谢谢
    • 在我的例子中,“fb://profile/PageId”- 它的打开新闻源;不是 Facebook 页面 :(
    • @AviC 您确定您更改了页面值(替换 PageName)吗?
    【解决方案4】:

    对于 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>
    

    【讨论】:

      【解决方案5】:

      我刚刚找到了这个 URL 方案 fb://profile?id={userid/username/pageid},截至 2020 年 8 月 30 日它运行良好。

      例如:fb://profile?id=4fb://profile?id=zuck

      警告:请自行承担使用风险,因为 Facebook 开发人员文档中没有记录。此 URL 方案将来可能会被 Facebook 应用程序删除,而不会发出任何警告和指示。

      【讨论】:

      • 我发现它在 2018 年发布在这里并确认它有效,所以它应该是“相当稳定”的 URL 方案:tutorialspoint.com/…
      • 工作解决方案 2020 年 10 月
      • 我搜索了很多。几乎所有东西都过时了。这是 2021 年 9 月的正确答案。
      【解决方案6】:

      经过大量测试,我找到了最有效的解决方案之一:

      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" 的句子顺序因您的喜好而异......

      享受吧!! :-)

      【讨论】:

        【解决方案7】:

        斯威夫特 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,您需要设置以下参数:

        注意:在 Source Mode 下打开 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>
        

        【讨论】:

          【解决方案8】:

          // Swift 5,可以使用这个功能打开fb page/profile

                 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)
                      }
                  }
          

          【讨论】:

          • 请对您的答案进行解释以便更好地理解。
          猜你喜欢
          • 2019-09-09
          • 1970-01-01
          • 2011-06-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-14
          • 2021-09-30
          • 2016-05-07
          相关资源
          最近更新 更多