【问题标题】:Open Facebook profile in app在应用中打开 Facebook 个人资料
【发布时间】:2015-07-26 21:25:53
【问题描述】:

我试图让当用户按下 Facebook 按钮时,它会打开 Facebook 应用程序,或者在浏览器中。

导入代码:

import Foundation

扩展代码:

extension UIApplication {
    class func tryURL(urls: [String]) {
        let application = UIApplication.sharedApplication()
        for url in urls {
            if application.canOpenURL(NSURL(string: url)!) {
                application.openURL(NSURL(string: url)!)
                return
            }
        }
    }
}

功能代码:

func fimageTapped()
{
    UIApplication.tryURL([
        "fb://profile/1357163924", // App
        "http://www.facebook.com/1357163924" // Website if app fails
        ])
}

我在行出现错误:

class func tryURL(urls: [String]) {

错误信息:

“tryURL”的重新声明无效

这是我找到代码的地方:Xcode swift link to facebook page

有人知道这里出了什么问题吗?

【问题讨论】:

    标签: xcode swift


    【解决方案1】:

    在 Swift 3 中使用这个:

    let facebookID: String = "000000000000"
    let facebookName: String = "name"
    let facebookURLID = URL(string: "fb://profile/\(facebookID)")!
    let facebookURLWeb = URL(string: "https://m.facebook.com/\(facebookName)?id=\(facebookID)")!
    
    if(UIApplication.shared.canOpenURL(facebookURLID)){
        UIApplication.shared.openURL(facebookURLID)
    } else {
        UIApplication.shared.openURL(facebookURLWeb)
    }
    

    请记住,从 iOS 9 和 10 开始,您需要在 Info.plist 中声明:

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

    这样,对 Facebook 方案的查询将不会因权限错误而失败:

    "This app is not allowed to query for scheme fb"
    

    【讨论】:

      【解决方案2】:

      用过这个,效果很好:

      var fbURLWeb: NSURL = NSURL(string: "https://www.facebook.com/ID")!
              var fbURLID: NSURL = NSURL(string: "fb://profile/ID")!
      
              if(UIApplication.sharedApplication().canOpenURL(fbURLID)){
                  // FB installed
                  UIApplication.sharedApplication().openURL(fbURLID)
              } else {
                  // FB is not installed, open in safari
                  UIApplication.sharedApplication().openURL(fbURLWeb)
              }
      

      【讨论】:

        【解决方案3】:

        斯威夫特 3:

        重要提示: UIApplication 是在 UIKit 中声明的,因此请确保您也导入了 UIKit。

            import Foundation
            import UIKit
        
        extension UIApplication {
            class func tryURL(_ urls: [String]) {
                let application = UIApplication.shared
                for url in urls {
                    if application.canOpenURL(URL(string: url)!) {
                    application.open(URL(string: url)!, options: [:], completionHandler: nil)
        
                    return
        
                    }
                }
            }
        }
        

        此外:

        application.openURL(NSURL(string: url)!)
        

        Swift 3 中已更改为 open 并带有 completionHandler:

        application.open(URL(string: url)!, options: [:], completionHandler: nil)
        

        接下来在您的 viewController 中: 在 vi​​ewDidLoad 上方声明您的 facebook 应用程序和 web-url 并创建一个函数或 IBAction 函数,您可以在其中执行 UIapplication.tryURL:

        import UIKit
        
        class ViewController: UIViewController {
        
        let fbAppUrl = "facebook://profile/yourFBprofileID"
        let fbWebUrl = "https://www.facebook.com/yourFBprofileID"
        
        override func viewDidLoad() {
            super.viewDidLoad()
        
        }
        
        func openFacebook() {
        
            UIApplication.tryURL([fbAppUrl, fbWebUrl])
        
            }
        
        }
        

        首先 iOS 将尝试打开 fbAppUrl,但如果设备上未安装 facebook 应用程序,它将在 Safari 中打开 fbWebUrl。

        【讨论】:

          【解决方案4】:

          对于 Swift 4

                      let webURL: NSURL = NSURL(string: "https://www.facebook.com/ID")!
                      let IdURL: NSURL = NSURL(string: "fb://profile/ID")!
          
                      if(UIApplication.shared.canOpenURL(IdURL as URL)){
                          // FB installed
                          UIApplication.shared.open(webURL as URL, options: [:], completionHandler: nil)
                      } else {
                          // FB is not installed, open in safari
                          UIApplication.shared.open(webURL as URL, options: [:], completionHandler: nil)
                      }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-09-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-03
            相关资源
            最近更新 更多