Как реализовать GoogleSignIn - PullRequest
0 голосов
/ 04 марта 2019

Некоторые документы 1 2 говорят, что я должен использовать application:openURL:options:.У меня вопрос - поскольку я уже использую этот метод, и пример кода для его полной реализации:

func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any])
  -> Bool {
    return GIDSignIn.sharedInstance().handle(url,
                            sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                            annotation: [:])
}

Как я могу определить, что вызов openURL предназначен для входа в систему?

Я бы предпочел реализовать этот метод, эквивалентный тому, как он есть в FirebaseUI 3 :

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String?
  if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false {
    return true
  }
  // other URL handling goes here.
  return false
}

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Согласно документации этот метод возвращает YES, если GIDSignIn обработал этот URL.

Так что, похоже, вы можете делать то же, что и в примере FUIAuth, т.е. добавить 'if 'проверьте возвращаемое значение:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
    let isSignInHandled = GIDSignIn.sharedInstance().handle(url,
        sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
        annotation: [:])
    if isSignInHandled {
        return true
    }
    // ... other code
}
0 голосов
/ 04 марта 2019

На самом деле вам это не нужно, вы можете связать их с помощью ||, например,

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

    return FBSDKApplicationDelegate.sharedInstance().application(application, open: url as URL?, sourceApplication: sourceApplication, annotation: annotation) 
   || GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication,annotation: annotation)
   || FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false

}

Любой ударит по return true, в противном случае, если все false, то результат будет false

0 голосов
/ 04 марта 2019

Как вы могли заметить, метод GIDSignIn.sharedInstance().handle возвращает bool, поэтому вы можете назвать его так:

func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any])
  -> Bool {
    if GIDSignIn.sharedInstance().handle(url, sourceApplication:options[.sourceApplication] as? String, annotation: [:]) {
        return true
    }

    return false
}  

Этот подход более полезен, если ваше приложение поддерживает другие различные видылогины (facebook, твиттер и т. д.)
В этом случае все, что вам нужно сделать, это добавить больше if условий для каждого вида URL.
Надеюсь, это поможет

...