Поделиться с Facebook больше не работает на iOS 11

Я использую Facebook SDK для iOS, и он отлично работает на iOS 10, но когда я обновляю свой телефон до iOS 11, общий ресурс facebook больше не работает. пожалуйста, помогите, заранее спасибо.


person Joseph Mikko Manoza    schedule 25.09.2017    source источник


Ответы (2)


К сожалению, с обновлением iOS 11 службы социальных сетей (Facebook, Twitter, Vimeo и Flickr), которые раньше имели единый вход для общесистемной интеграции, были удалены.

Вместо этого фрагмента кода для iOS 10 и более ранних версий:

let viewController = SLComposeViewController(forServiceType: SLServiceTypeFacebook)
viewController.add(imageView.image!)
viewController.add(URL(string: "http://www.example.com/"))
viewController.setInitialText("Text to post!")

self.present(viewController!, animated: true, completion: nil)

Вы можете размещать сообщения на Facebook с помощью FBSDKGraphRequest. .

Сначала создайте свое приложение из консоли разработчика Facebook. После этого настройте проект Xcode (следуя инструкциям здесь: https://developers.facebook.com).

Пользователь должен быть зарегистрирован перед публикацией:

    let login: FBSDKLoginManager = FBSDKLoginManager()
        login.logIn(withPublishPermissions: ["publish_actions"], from: self) { (result, error) in

            if (error != nil) {
                print("publish_actions: \(error!)")
            } else if (result?.isCancelled)! {
                print("publish_actions: Canceled")
            } else if (result?.grantedPermissions.contains("publish_actions"))! {
                print("publish_actions: permissions granted: \(String(describing: result?.token.tokenString))")

                UserDefaults.standard.set(result?.token.tokenString, forKey: "facebook_token")

            }

        }

После регистрации сохраните токен и используйте его для публикации сообщения через FBSDKGraphRequest:

FBSDKGraphRequest.init(graphPath: "me/feed",
                           parameters: ["message": "text to post on Facebook"],
                           tokenString: "token",
                           version: "v2.10",
                           httpMethod: "POST").start(completionHandler: { (connection, result, error) -> Void in
                            if let error = error {
                                print("Error: \(error)")
                            } else {
                                print("Posted successfully!")
                            }
                           })

Надеюсь, это поможет.

person Filippo    schedule 29.09.2017
comment
спасибо за помощь, я нашел быстрое решение этой проблемы, я обновил свой файл pod, и это решило проблему, но спасибо за помощника. - person Joseph Mikko Manoza; 02.10.2017
comment
@JosephMikkoManoza, спасибо, что задокументировали эту проблему и сэкономили мне время. Обновление моих модулей Facebook до последней версии исправило это для меня. Я добавил ответ, чтобы помочь другим. - person Bill Bunting; 04.10.2017
comment
Я не уверен, почему вы хотите хранить строку токена в UserDefaults. Вы всегда можете получить свой текущий токен, включая разрешения и т. д., с помощью FBSDKAccessToken.current(). - person Dmitry; 08.10.2017

Эта проблема для iOS 11 с Facebook Share (в моем случае FBSDKShareDialog в Objective-c) устраняется путем обновления до последних фреймворков API Facebook. Через стручки это в настоящее время выглядит следующим образом:

Подфайл

  pod 'FBSDKCoreKit', '~> 4.27.0'
  pod 'FBSDKLoginKit', '~> 4.27.0'
  pod 'FBSDKShareKit', '~> 4.27.0'

В командной строке при использовании «поиска модуля» будет показана последняя версия модуля. Например, поиск модуля FBSDKShareKit.

person Bill Bunting    schedule 04.10.2017
comment
Работал на меня! Спасибо - person Anton Belousov; 06.12.2017