#ios #swift #firebase #firebase-authentication
#iOS #swift #firebase #firebase-аутентификация
Вопрос:
Как я могу получить учетные данные для входа (метод входа — Google) в расширении iMessage?
Устаревшая документация рекомендует совместно использовать токен аутентификации Firebase пользователя через группы приложений, а затем считывать его как пользовательский токен. Но это не пользовательский токен и выдает ошибку, указывающую, что это недопустимый токен.
Я могу заставить это работать, только выполнив следующее:
AppDelegate.swift (целевой хост)
// ********** Beginning of the Google Sign-in *********************
public func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
if let error = error {
print(error.localizedDescription)
return
}
// ** Passing our creds to other target apps like iMessage **
let authentication = user.authentication
let credential = FIRGoogleAuthProvider.credential(withIDToken: (authentication?.idToken)!,
accessToken: (authentication?.accessToken)!)
let defaults = UserDefaults(suiteName: "group.pigshareData")!
defaults.set((authentication?.idToken)!, forKey: "idToken")
defaults.set((authentication?.accessToken)!, forKey: "accessToken")
defaults.synchronize()
// ** End of passing our creds **
FIRAuth.auth()?.signIn(with: credential) { (user, error) in
// ...
}
}
MessagesViewController.swift (целевой iMessage)
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
FIRApp.configure()
let defaults = UserDefaults(suiteName: "group.pigshareData")!
// Grab the auth token
let authToken = defaults.object(forKey: "FAuthDataToken") as? String
let idToken = defaults.object(forKey: "idToken") as? String
let accessToken = defaults.object(forKey: "accessToken") as? String
let credential = FIRGoogleAuthProvider.credential(withIDToken: idToken!,
accessToken: accessToken!)
FIRAuth.auth()?.signIn(with: credential){ (user, error) in
print("(user) (error)")
}
// FIR Database stuff
FIRDatabase.database().persistenceEnabled = true
ref = FIRDatabase.database().reference()
}
Мой вопрос
Это правильный способ сделать это? Я не могу заставить это работать с одним токеном, как описано в устаревшей документации.
Обратите внимание, что выше передаются как an authentication?.idToken
, так и an authentication?.accessToken
, затем переменная credential
создается из этих двух переменных. Может быть, это стандартный способ сделать это?
Комментарии:
1. Вы когда-нибудь находили лучшее решение для этого @Mike?