Невозможно опубликовать глубокую ссылку на Facebook через приложение iOS - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь использовать FBSDK, в частности, FBSDKShareKit, чтобы позволить пользователям размещать глубокую ссылку на свою стену из моего приложения.У меня настроено приложение с разработчиками Facebook (я знаю, что это не проблема, потому что пользователи моего приложения без проблем входят в Facebook), и к нему привязан суффикс схемы.enter image description here

У моего приложения info.plist установлен тот же суффикс.Я знаю, что это работает, потому что при открытии URL-адреса с этим суффиксом в Safari он переходит к моему приложению.enter image description here

При открытии 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. Использование FBSDKShareKit's FBSDKShareButton, установив shareContent кнопки в FBSDKShareLinkContent с 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для создания экземпляра SLComposeViewController, установив URL указанного контроллера вида на тот же, что и выше, и представив контроллер представления.При публикации через Facebook мне выдается сообщение об ошибке «При обмене вашей ссылкой произошла ошибка».Опять же, при замене рассматриваемого URL-адреса на «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&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 Ответ

0 голосов
/ 22 февраля 2019

Кажется, все, что мне нужно было сделать, это подождать некоторое время (полагаю, что до начала работы ссылки может пройти до 48 часов?).

Обратите внимание, что приложение Facebook не позволяет пользователям переходить к другому приложению через универсальные / глубокие ссылки. Их встроенный в приложение браузер спроектирован так, чтобы этого не происходило.Существует несколько обходных путей, особенно Branch.io , который позволяет пользователям использовать свои универсальные ссылки через Facebook.

...