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

Posted

技术标签:

【中文标题】按下按钮时打开 Facebook 应用程序页面。斯威夫特 5【英文标题】:Opening up facebook app page when button is pushed. Swift 5 【发布时间】:2019-06-08 17:07:45 【问题描述】:

Facebook 应用程序无法打开,Safari 中的 facebook 反而打开。使用 xCode 10.2.1

运行 ios 12.2 的部署目标

编辑:此代码确实实现了 Instagram 的预期目标

Edit2:所以在@bbrodsky 的建议下,我将 URL 链接中的“facebook”更改为“fb”。现在的问题是它打开的是我的个人提要,而不是我希望它打开的业务页面。

Edit3:所以我让它工作了。打开 facebook 应用程序,然后转到所需的页面。必须将 appURL 更改为“fb://profile/NUMERICFBID”。我能够在此站点https://findmyfbid.com/ 上获得该页面的数字 facebook ID

从这篇文章和其他文章中尝试过的解决方案。似乎找不到这个问题的任何最新答案,因为一切似乎都来自早期版本的 iOS 和 swift/xCode。不确定事情是否发生了变化。已将推荐代码添加到 plist 源文件中,但没有结果。

How to open fb and instagram app by tapping on button in Swift

@IBAction func facebookButtonTapped(_ sender: UIButton) 
   let screenName =  "MYSCREENNAME"
   let appURL = NSURL(string: "facebook://user?screen_name=\ 
     (screenName)")!
   let webURL = NSURL(string: "https://facebook.com/\ 
     (screenName)")!

   if UIApplication.shared.canOpenURL(appURL as URL) 
            if #available(iOS 10.0, *) 
                UIApplication.shared.open(appURL as URL, options: 
            [:], completionHandler: nil)
             
            else  UIApplication.shared.openURL(appURL as URL)
            
         
   else 
            //redirect to safari because the user doesn't have 
              Instagram
            if #available(iOS 10.0, *) 
                UIApplication.shared.open(webURL as URL, options: 
                [:], completionHandler: nil)
             
            else UIApplication.shared.openURL(webURL as URL)
            
        

预期结果是 facebook 应用程序打开到特定页面。不断收到此错误代码。

2019-06-08 11:28:39.561051-0500 SocialMediaLinkPractice[9888:2173963] -canOpenURL:URL 失败:“facebook://user?screen_name=MYSCREENNAME”-错误:“不允许查询此应用用于计划 facebook"

【问题讨论】:

为什么将 URL 创建为 NSURL,然后在使用它们的任何地方将它们转换为 URL?为什么不首先将它们创建为URL 我只是一个初学者,正在做一个简单的项目,只是复制了代码。老实说,我什至不知道“NSURL”和“URL”之间的区别是什么。不过欣赏输入。会乱改。 @雾迈斯特 不用担心。只是好奇。在大多数情况下,当您看到带有 NS 前缀的东西时,它是来自 Objective-C 的遗留类型。他们中的许多人现在都有他们的 Swift 等价物,它们删除了 NS。在您的情况下,只需删除 NS,然后您就可以删除“as URL”位。 啊,我明白了。是的,我以前查过 NS 前缀,但没有找到任何可以解释它的东西。谢谢(你的)信息。 @雾迈斯特 【参考方案1】:

在 Info.plist 中添加

首先,您必须修改Info.plist 以列出instagramfacebookLSApplicationQueriesSchemes。只需打开 Info.plist 作为源代码,然后粘贴:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>instagram</string>
    <string>fb</string>
</array>

当您想要打开 Facebook 应用程序并定向到 Facebook 页面时,请使用页面 ID。这是一个链接,您可以在其中找到它们:https://www.facebook.com/help/1503421039731588

方案

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 应用程序到相册列表 来源:https://***.com/a/10416399/8642838

SwiftUI-代码版

    Button(action: 
        let url = URL(string: "fb://profile/<PAGE_ID>")!
        let application = UIApplication.shared
        // Check if the facebook App is installed
        if application.canOpenURL(url) 
            application.open(url)
         else 
            // If Facebook App is not installed, open Safari with Facebook Link
            application.open(URL(string: "https://de-de.facebook.com/apple")!)
        
    , label: 
        Text("Facebook")
    )

【讨论】:

【参考方案2】:

如果你想在 Facebook 应用上打开特定的个人资料,你必须使用

let username = "your Facebook name"
let appURL = URL(string: "fb://profile/\(username)/?id=\(username)")!

否则将无法正常工作。

【讨论】:

【参考方案3】:

我相信您想使用“fb://”而不是“facebook://”

【讨论】:

太棒了。可以打开应用程序。但现在它只是打开我的提要,而不是我希望它打开的页面。 @bbrodsky 那行得通。必须找到我使用此站点所做的 facebook 页面数字 ID。 findmyfbid.com 非常感谢您的帮助。我现在唯一的小错误是,如果 facebook 应用程序已经在预期的页面上,单击我的应用程序中的链接只会将 facebook 应用程序打开到带有搜索栏的空白页面。真的不太关心它,但我想把它写在这里,以防有人提出一个简单的解决方案。 @futureappguru 很高兴我能帮上忙!

以上是关于按下按钮时打开 Facebook 应用程序页面。斯威夫特 5的主要内容,如果未能解决你的问题,请参考以下文章

当在rails中按下浏览器的后退按钮时,在注销后进入登录页面

如何在按钮单击时将用户发送到 Facebook 页面(Facebook Messenger)

Facebook Login 中的取消按钮使用 Swift 崩溃了吗?

如何在 Facebook 上分享帖子时解决登录问题

Facebook:当用户点击粉丝页面上的“喜欢”按钮时获取

Xcode快速链接到Facebook页面[关闭]