Обработка открытого URL для входа в Facebook с помощью Swift SDK

#ios #swift #facebook

#iOS #swift #Facebook

Вопрос:

Я использую новый Facebook Swift SDK вместо Objective C SDK.

Ранее openURL в AppDelegate.swift должны были быть реализованы. Однако руководство Facebook по Swift не охватывает эту часть.

Регистрируется следующее:

Implementation of application:openURL:sourceApplication:annotation: not found. Please add the handler into your App Delegate. Class: Shoppie.AppDelegate

Но моя реализация не работает:

 func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        return GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: nil)
    if (url.scheme?.hasPrefix("fb"))! {
        return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!, annotation: nil)
    } else {
        return GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: nil)
    }
    return false
}
  

Из-за:

 Use of unresolved identifier 'FBSDKApplicationDelegate'
  

Я установил Swift SDK, добавив следующее в свой Podfile :

 pod 'FacebookCore'
pod 'FacebookLogin'
pod 'FacebookShare'
  

И выполняется pod install .

Я не могу найти, каким должен быть обновленный код.

Ответ №1:

Их документации немного не хватает, но они предоставляют хороший образец приложения в своем репозитории github. смотрите https://github.com/facebook/facebook-sdk-swift/blob/master/Samples/Catalog/Sources/AppDelegate.swift

Вот код (Swift 3), который я использую для интеграции SDK в свои приложения:

 import FacebookCore

@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate {

  func application(_ application: UIApplication,
                   didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)

    return true
  }

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

    if let _ = Bundle.main.object(forInfoDictionaryKey: "FacebookAppID") as? String {
      return SDKApplicationDelegate.shared.application(application,
                                                       open: url,
                                                       sourceApplication: sourceApplication,
                                                       annotation: annotation)
    }

      return false
    }

  @available(iOS 9.0, *)
  func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {

    if let _ = Bundle.main.object(forInfoDictionaryKey: "FacebookAppID") as? String {
      return SDKApplicationDelegate.shared.application(application, open: url, options: options)
    }

      return false
  }
}
  

К вашему сведению — библиотека facebook swift в основном является просто оболочкой для их стандартной библиотеки objective-c.

Комментарии:

1. Ах, FBSDKApplicationDelegate был переименован в SDKApplicationDelegate . Спасибо за вашу помощь!

Ответ №2:

Я исправил Use of unresolved identifier 'FBSDKApplicationDelegate' проблему, добавив следующее в свой Bridging-Header.h файл:

 #import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>
  

Вход в систему работает после внесения этих изменений.

Похоже, Facebook Swift SDK все еще находится в стадии бета-тестирования, и учебные пособия еще предстоит обновить. (Проблема с Github)