Я пытаюсь использовать FBSDK, в частности, FBSDKShareKit, чтобы позволить пользователям размещать глубокую ссылку на свою стену из моего приложения.У меня настроено приложение с разработчиками Facebook (я знаю, что это не проблема, потому что пользователи моего приложения без проблем входят в Facebook), и к нему привязан суффикс схемы.![enter image description here](https://i.stack.imgur.com/IHMXr.png)
У моего приложения info.plist установлен тот же суффикс.Я знаю, что это работает, потому что при открытии URL-адреса с этим суффиксом в Safari он переходит к моему приложению.![enter image description here](https://i.stack.imgur.com/MiMLC.png)
При открытии 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.Я попробовал два подхода:
Использование 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
Использование социальной платформы 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](https://i.stack.imgur.com/c4N5I.jpg)
![The error I'm presented with when trying to post my deep link on Facebook via SLComposeViewController](https://i.stack.imgur.com/pCREU.jpg)
Итак, в заключение Я полагаю, что проблема здесь заключается в том, что 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 и, в идеале, увеличивая трафик в мое приложение?