0

我正在尝试使用 FBSDK,特别是 FBSDKShareKit 让用户从我的应用程序中发布指向他们墙的深层链接。我在 Facebook 开发人员处设置了我的应用程序(我知道这不是问题,因为我的应用程序用户使用 Facebook 登录没有问题)并且有一个与应用程序关联的方案后缀。 在此处输入图像描述

我的应用程序的 info.plist 具有相同的后缀集。我知道这很有效,因为当从 Safari 打开带有此后缀的 URL 时,它会导航到我的应用程序。 在此处输入图像描述

打开 URL 时,我的应用程序委托会检查 URL 主机是否与某个字符串匹配,如果匹配,我会检查 URL 路径是否与某个字符串匹配。如果这两个都匹配,那么我解析从 URL 传递的参数,创建一个自定义对象(在本例中为一个事件),实例化一个视图控制器,并使用自定义对象的属性填充该视图控制器。

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {


    if url.host != "www.mywebsite.app" {
        return false
    } else if url.path == "/sharedEvent" {
        if let parameters = url.queryParameters {

            //Get params from url
            let name = parameters["name"]!
            let description = parameters["description"]!
            let lat = parameters["lat"]!.CGFloatValue()
            let lng = parameters["lng"]!.CGFloatValue()
            let startTime = Int(parameters["startTime"]!)!
            let endTime = Int(parameters["endTime"]!)!
            let categories = parameters["categories"]!
            let priority = Int(parameters["priority"]!)!
            let id = parameters["id"]!
            let userId = parameters["userId"]!
            let userName = parameters["userName"]!
            let userEmail = parameters["userEmail"]!
            let photoURLs = parameters["photoURLs"]!
            let isVerified = Int(parameters["isVerified"]!)


            //Create event from parameters
            let sharedEvent = Event(name: name, description: description, lat: lat, long: lng, startTime: Date(timeIntervalSince1970: Double(startTime)), endTime: Date(timeIntervalSince1970: Double(endTime)), categories: [categories], priority: priority, id: id, userId: userId, userName: userName, userEmail: userEmail, photoURLs: [photoURLs], isVerified: isVerified!)

            //Instantiate eventVC
            let storyboard = UIStoryboard(name: "Main", bundle: .main)
            let eventVC = storyboard.instantiateViewController(withIdentifier: "EventViewController") as! EventViewController
            eventVC.event = sharedEvent
            eventVC.userId = userId
            eventVC.userEmail = userEmail
            eventVC.userName = userName
            DispatchQueue.main.async {
                self.window!.rootViewController!.presentedViewController?.present(eventVC, animated: true, completion: nil)
            }


        }
        return true
    }

这段代码的工作原理是我通过使用一些参数从另一个应用程序打开一个 URL 来测试它的,并且在应用程序打开时会显示相应的视图控制器。URL 可能如下所示:

fb1068346896678533://www.hootevents.app/sharedEvent?name=Some%20Name&description=Some%20description&lat=38.7016&lng=-90.447&startTime=1548466210&endTime=1551058140&categories=lhw9bs31nr2twlx&priority=1&id=15510581401548012896PfZLZCzDUh&userId=f5qLpyu4XNWa4eJI17sBi71bIw23&userName=David%20Chopin&userEmail=chopindavidg@gmail.com&photoURLs=https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/1200px-Google_2015_logo.svg.png&isVerified=1

我的问题在于通过 Facebook 实际呈现深层链接。我尝试了两种方法:

  1. 通过将按钮的 shareContent 设置为 FBSDKShareLinkContent 使用 FBSDKShareKit 的 FBSDKShareButton,其内容 url 等于上面显示的内容。这样做会导致 FBSDKShareButton 灰显,即禁用。将内容的 URL 更改为“www.google.com”之类的内容会启用该按钮,这意味着 Facebook 出于某种原因不喜欢我的 URL。

    let button = FBSDKShareButton()
    let shareContent = FBSDKShareLinkContent()
    content.contentURL = URL(string: "fb1068346896678533://www.hootevents.app/sharedEvent?name=Some%20Name&description=Some%20description&lat=38.7016&lng=-90.447&startTime=1548466210&endTime=1551058140&categories=lhw9bs31nr2twlx&priority=1&id=15510581401548012896PfZLZCzDUh&userId=f5qLpyu4XNWa4eJI17sBi71bIw23&userName=David%20Chopin&userEmail=chopindavidg@gmail.com&photoURLs=https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/1200px-Google_2015_logo.svg.png&isVerified=1")
    button.shareContent = content
    
  2. 使用 iOS 的 Social 框架来实例化 SLComposeViewController,将所述视图控制器的 URL 设置为与上面相同的 URL,并呈现视图控制器。通过 Facebook 发布后,我收到错误消息“共享您的链接时出现问题”。同样,当用“www.google.com”替换有问题的 URL 时,帖子成功通过,再次表明 Facebook 出于某种原因不喜欢我提供的深层链接。

    @IBAction func shareButtonPressed(_ sender: Any) {
    
        let vc = SLComposeViewController(forServiceType: SLServiceTypeFacebook)
        vc?.add(loadedImages.first?.image)
    
        vc!.add(URL(string: shareURL))
        for photo in self.loadedImages {
            vc!.add(photo.image!)
        }
        present(vc!, animated: true, completion: nil)
    }
    

显示链接的 SLComposeViewController,Facebook 显然不喜欢

尝试通过 SLComposeViewController 在 Facebook 上发布我的深层链接时出现的错误

所以,总而言之,我认为这里的问题在于 Facebook 不允许我发帖的事实:

fb1068346896678533://www.hootevents.app/sharedEvent?name=Some%20Name&description=Some%20description&lat=38.7016&lng=-90.447&startTime=1548466210&endTime=1551058140&categories=lhw9bs31nr2twlx&priority=1&id=15510581401548012896PfZLZCzDUh&userId=f5qLpyu4XNWa4eJI17sBi71bIw23&userName=David%20Chopin&userEmail=chopindavidg@gmail.com&photoURLs=https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/1200px-Google_2015_logo.svg.png&isVerified=1

代表用户。如果是这种情况,我应该如何格式化我的深层链接,以便用户可以从我的应用程序将其发布到他们的墙上,有效地与他们的 Facebook 朋友分享活动,并在理想情况下为我的应用程序带来更多流量?

4

1 回答 1

0

看来我所要做的就是等待一段时间(我想链接开始工作可能需要长达 48 小时?)。

请注意,Facebook 应用程序不允许用户通过通用/深度链接导航到另一个应用程序。他们的应用内浏览器旨在不允许这种情况发生。有一些解决方法,最著名的是Branch.io,它允许用户通过 Facebook 使用他们的通用链接。

于 2019-02-22T01:14:27.103 回答