Ошибка входа в Facebook - неизвестная ошибка при создании URL (ошибка com.facebook.sdk.core 3)
Я получаю эту ошибку при попытке войти через Facebook: Optional(Error Domain=com.facebook.sdk.core Code=3 "(null)" UserInfo={com.facebook.sdk:FBSDKErrorDeveloperMessageKey=Unknown error building URL.})
Я читал в других постах, что это ошибка в версии sing9 4.39.0 FBSDKLoginKit, и решение понижено до 4.38.o Теперь это дало мне еще одну ошибку: Firebase Auth Interop/FIRAuth Interop.h' file not found in the FIRAuth.m #import <FirebaseAuthInterop/FIRAuthInterop.h>
Поскольку я новичок в социальных логинах, а руководство на странице для разработчиков в Фейсбуке не актуально с swift, а некоторые из них в obj-c, я мог бы неправильно перевести его на swift. Можете ли вы определить, где проблема? Также фреймворк FBSDKLogin выделен красным в папке фреймворков, а все фреймворки - в папке pods/Frameworks. Вот код: AppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge], completionHandler: ({_,_ in
}))
UNUserNotificationCenter.current().delegate = self
var error: NSError?
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
} catch let error1 as NSError{
error = error1
print("could not set session. err:\(error!.localizedDescription)")
}
do {
try AVAudioSession.sharedInstance().setActive(true)
} catch let error1 as NSError{
error = error1
print("could not active session. err:\(error!.localizedDescription)")
}
window?.tintColor = UIColor.blue
// Use Firebase library to configure APIs
FirebaseApp.configure()
// goggle only
GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
GIDSignIn.sharedInstance().delegate = self
// Facebook SDK
// FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
// return true
}
Открытый URL-адрес, на котором я размещаю вход в Google и Facebook:
// start google sign in methods
@available(iOS 9.0, *)
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any])
-> Bool {
// google only
// return
// GIDSignIn.sharedInstance().handle(url,
// sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
// annotation: options[UIApplicationOpenURLOptionsKey.annotation])
// both google and facebook
let googleDidHandle = GIDSignIn.sharedInstance().handle(url,
sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation])
guard let source = options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String else { return false }
let annotation = options[UIApplicationOpenURLOptionsKey.annotation] as? String
let facebookDidHandle = FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: source, annotation: annotation)
// return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: source, annotation: annotation)
return googleDidHandle || facebookDidHandle
}
Логин vc с методом Facebook, где я получаю ошибку:
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
if error == nil {
print("User just logged in via Facebook")
let credentials = FacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString)
Auth.auth().signInAndRetrieveData(with: credentials) { (user, error) in
if (error != nil) {
print("Facebook authentication failed")
} else {
print("Facebook authentication succeed")
}
}//)
} else {
print("An error occured the user couldn't log in")
print(error)
}
}
Ответы
Ответ 1
Я нашел проблему. Это не связано с кодом. Кажется, это ошибка в последних двух версиях Facebook SDK, поэтому я понизил ее до
pod 'FBSDKCoreKit', '4.36.0'
pod 'FBSDKLoginKit', '4.36.0'
pod 'FacebookCore', '0.4'
pod 'FacebookLogin', '0.4'
и это работает гладко. Тест для кого-то версии 4.38 решил проблему, это не машина для меня. Надеюсь, что это будет полезно для других.
Ответ 2
Это ошибка SDK Facebook в версии 4.39.0, которая вызывает эту ошибку. Чтобы устранить эту ошибку, просто понизьте CoreKit и LoginKit до 4.38.0, очистите производные данные, а также очистите папку сборки (CMD + OPTION + SHIFT + K).
pod 'FBSDKCoreKit', '~> 4.38.0'
pod 'FBSDKLoginKit', '~> 4.38.0'
Если вы используете FacebookCore и FacebookLogin, сделайте следующее.
pod 'FacebookCore'
pod 'FacebookLogin'
pod 'FBSDKCoreKit', '~> 4.38.0'
pod 'FBSDKLoginKit', '~> 4.38.0'
Ответ 3
Похоже, что это было исправление для этого 4.39.1 был выпущен 15 января 2019 года (очевидно, через неделю)
https://developers.facebook.com/docs/ios/change-log-4x/
Ответ 4
Этот обходной путь на GitHub работал для меня:
https://github.com/facebook/facebook-swift-sdk/issues/301#issuecomment-446363750
Есть также несколько других обходных путей, которые работали для других людей.
Мой файл pod выглядел так, когда он работал:
pod 'FBSDKCoreKit', :git => 'https://github.com/facebook/facebook-objc-sdk.git', :branch => 'master'
pod 'FacebookCore'
pod 'FacebookLogin'
pod 'FacebookShare'