2017-09-13 1 views
1

J'essaie d'implémenter AWS Mobile Hub dans iOS. Je vois mon identité sur Identity Browser lorsque je clique sur le bouton "Se connecter avec Google". Il n'y a pas de problème ici. Ensuite, je veux accéder à GIDGoogleUser. J'initialisés GIDGoogleUser mais je ne peux pas accéder aux informations de l'utilisateur:AWS Mobile Hub Authentification Google iOS

let googleUser = GIDGoogleUser.init() 

Ensuite, j'ai vérifié est l'utilisateur connecté avec Google:

if(AWSGoogleSignInProvider.init().isLoggedIn){ 
     print("Success") 
}else{ 
     print("Authentication error") 
} 

Je vois la sortie « d'erreur d'authentification » dans Xcode. Où est mon erreur? Et comment puis-je obtenir l'adresse e-mail et le nom complet de l'utilisateur google?

AppDelegate.swift:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     AWSGoogleSignInProvider.sharedInstance().setScopes(["profile","email", "openid"]) 
    AWSSignInManager.sharedInstance().register(
      signInProvider: AWSGoogleSignInProvider.sharedInstance()) 


let didFinishLaunching = AWSSignInManager.sharedInstance().interceptApplication(
       application, didFinishLaunchingWithOptions: launchOptions) 

     if (!isInitialized) { 
      AWSSignInManager.sharedInstance().resumeSession(completionHandler: { 
       (result: Any?, error: Error?) in 
       print("Result: \(result) \n Error:\(error)") 
      }) 
      isInitialized = true 
     } 

     return didFinishLaunching 
} 
+0

Vous devriez utiliser la propriété 'currentUser' de l'instance partagée du client de connexion google pour avoir accès aux informations du client. Reportez-vous à: https://developers.google.com/identity/sign-in/ios/api/interface_g_i_d_sign_in.html#ac49bf5dabe7b89781cd58e69cb015651 –

+0

Vous ne devriez pas utiliser 'AWSSignInManager.sharedInstance(). IsLoggedIn' pour vérifier la connexion? – Lawliet

Répondre

0

J'ai essayé de résoudre le même problème cette semaine et a constaté que n'est pas réellement possible de faire avec AWSGoogleSignInProvider.

Si vous parcourez le code d'AWS Mobile SDK, vous constaterez qu'il maintient une instance déclarée en interne du singleton GIDGoogleUser. Comme le GIDGoogleUser dans AWS SDK est une déclaration de classe distincte, l'appel à GIDGoogleUser.init() dans votre code crée une seconde instance de ce singleton. De mauvaises choses arrivent à ce moment-là. Malheureusement, AWS SDK ne rend pas son instance interne de GIDGoogleUser accessible via son API.

Je suis toujours à la recherche d'une solution de contournement raisonnable.