无法通过iOS应用程序发布与Facebook的深层链接

问题描述 投票:0回答:1

我正在尝试使用FBSDK,特别是FBSDKShareKit,让用户从我的应用程序发布到他们的墙的深层链接。我将我的应用程序设置为Facebook开发人员(我知道这不是问题,因为我的应用程序用户使用Facebook登录没有问题)并且具有与应用程序关联的方案后缀。 enter image description here

我的应用程序的info.plist具有相同的后缀集。我知道这是有效的,因为当从Safari打开带有此后缀的URL时,它会导航到我的应用程序。 enter image description here

打开URL时,我的app委托会检查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&[email protected]&photoURLs=https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/1200px-Google_2015_logo.svg.png&isVerified=1

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

  1. 使用FBSDKShareKit的FBSDKShareButton,将按钮的shareContent设置为FBSDKShareLinkContent,其内容网址等于上面显示的内容网址。这样做会导致灰色,即禁用,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&[email protected]&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”替换相关网址时,该帖子成功通过,再次表明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) }

The SLComposeViewController presenting the link, which Facebook clearly doesn't like

The error I'm presented with when trying to post my deep link on Facebook via SLComposeViewController

因此,总而言之,我认为这里的问题在于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&[email protected]&photoURLs=https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/1200px-Google_2015_logo.svg.png&isVerified=1

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

ios swift deep-linking fbsdk fbsdksharekit
1个回答
0
投票

似乎我所要做的就是等待一段时间(我想这个链接开始工作可能需要48小时?)。

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

© www.soinside.com 2019 - 2024. All rights reserved.