La connection Google n'est pas redirigée vers l'application après autorisation

J'utilise ce tutoriel pour implémenter Se connecter avec google in app.

  1. J'ai installé GoogleSignIn via Cocoapods. pod 'GoogleSignIn', '~> 2.4.0'
  2. GSignIn-Bridging-Header.h avec #import <GoogleSignIn/GoogleSignIn.h> intérieur.
  3. Créer des types d'URL: entrez la description de l'image ici

  4. Créer une vue avec la class GIDSignInButton

  5. Code ajouté:

     class ViewController: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate { override func viewDidLoad() { super.viewDidLoad() GIDSignIn.sharedInstance().delegate = self GIDSignIn.sharedInstance().uiDelegate = self GIDSignIn.sharedInstance().clientID = "KEY" } func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) { if let err = error { print(error) } else { print(GIDSignIn.sharedInstance().currentUser.profile.name) print(GIDSignIn.sharedInstance().currentUser.profile.email) self.performSegueWithIdentifier("idSegueContent", sender: self) } } func signIn(signIn: GIDSignIn!, didDisconnectWithUser user: GIDGoogleUser!, withError error: NSError!) { } } 
  6. Mais quand je clique permet

entrez la description de l'image ici

Il me redirige vers google.com, pas vers l'application.

Dans l'AppDelegate, vous devez append l'implémentation de

 func application(application: UIApplication, openURL url: NSURL, sourceApplication: Ssortingng?, annotation: AnyObject) -> Bool { return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) } 

Google renvoie des informations via l'URL, la méthode ci-dessus capture ces informations et les renvoie à l'application.

J'ai finalement réparé ceci après une journée de travail. @ayman Ibrahim était fondamentalement, mais je pense que la réponse est un peu plus large. Différentes versions de Swift / Objective-C et du SDK Google appellent différentes versions de la méthode canOpenURL dans AppDelegate. Je ne suis pas certain à 100% à ce sujet, et j'apprécierais la confirmation ou la correction. Voici la version de cette méthode qui a fonctionné pour moi. J'utilise le SDK v. 4.0 de Google, ciblant iOS 9.1 et utilisant Swift 3.0:

 func application(_ application: UIApplication, open url: URL, sourceApplication: Ssortingng?, annotation: Any) -> Bool { let checkFB = FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation) let checkGoogle = GIDSignIn.sharedInstance().handle(url as URL!,sourceApplication: sourceApplication,annotation: annotation) return checkGoogle || checkFB } 

J'utilise aussi le FBSDK, alors ignorez cette ligne.

J'ai trouvé une autre réponse pour cela. Dans mon cas, dans AppDelegate, j'ai implémenté 2 methods déléguées

 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options 

et

 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSSsortingng *)sourceApplication annotation:(id)annotation 

La première est la méthode déléguée et ne devrait plus être implémentée, elle a été remplacée par la seconde méthode. Mais d'une manière ou d'une autre, j'utilise toujours les deux et j'ajoute juste

 return [[GIDSignIn sharedInstance] handleURL:url sourceApplication:sourceApplication annotation:annotation]; 

dans le second, puis de nouveau, il suffit de callback à la première méthode, puis il ne navigue plus dans mon application.

Donc, je veux postr mon cas pour quelqu'un qui pourrait avoir cette erreur, il m'a fallu trop longtime pour savoir