Аутентификация по Firebase в расширении iMessage

#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?