web-dev-qa-db-fra.com

Vous devez spécifier | clientID | pour | GIDSignIn | erreur lors de la tentative de connexion avec Google

La connexion Google fonctionnait correctement avec Xcode 7. Après la mise à jour vers Xcode 8, le message d'erreur suivant a été affiché: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'You must specify |clientID| for |GIDSignIn|'. J'ai un fichier GoogleService-Info.plist avec mon CLIENT_ID.

J'ai pu résoudre ce problème en ajoutant la ligne suivante:

GIDSignIn.sharedInstance().clientID = "<CLIENT_ID>"

Il semble que le CLIENT_ID ne soit pas extrait de GoogleService-Info.plist. Je me suis assuré qu'il soit dans les ressources de la copie.

 enter image description here

Je ne devrais pas avoir à spécifier l'identifiant du client dans le code. Comment puis-je résoudre ce problème pour obtenir les informations du fichier GoogleService-Info.plist?

8
Daniel Que

Vous pouvez le faire de cette façon.

Rapide:

GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID

Objectif c :

GIDSignIn.sharedInstance.clientID = FIRApp.defaultApp.options.clientID;
11
Donal

Assurez-vous de placer ces codes en séquence. 

FirebaseApp.configure()

GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
GIDSignIn.sharedInstance().delegate = self

FirebaseApp.app()?.options.clientID ne pourra obtenir des données de GoogleService-Info.plist qu'après l'appel de FirebaseApp.configure().

2
Steven

J'ai eu le même problème. En fait, GoogleServices-Info.plist avait été mis à jour dans mon cas. J'ai téléchargé à nouveau GoogleServices-Info.plist et l'ai mis à jour avec l'ancien qui corrigeait le problème.

1
Zeeshan Tufail

Je le résous en ajoutant du code oublié à la classe AppDelegate:

#import "AppDelegate.h"
#import <Google/SignIn.h>    

@interface AppDelegate ()<GIDSignInDelegate>

@end

@implementation AppDelegate

#pragma mark - UIApplicationDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //Google sign-in setup
    NSError* configureError;
    [[GGLContext sharedInstance] configureWithError: &configureError];
    if (configureError) {
        NSLog(@"Error configuring Google services: %@", configureError.localizedDescription);
    }

    [GIDSignIn sharedInstance].delegate = self;

    return YES;
}


#pragma mark - GIDSignInDelegate

- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error {
    //add your code here
}

- (void)signIn:(GIDSignIn *)signIn didDisconnectWithUser:(GIDGoogleUser *)user withError:(NSError *)error {
    //add your code here
}

@end
1
WINSergey

Swift 3 Dans AppDelegate ajouter:

var configureError: NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \
(String(describing: configureError))")
0
user2451436

Si vous êtes arrivé ici en utilisant Google SignIn de Xamarin dans iOS, il semble que vous deviez définir l'ID client spécifiquement sur l'instance SignIn partagée pour que le reste du processus fonctionne. J'ai une classe pour gérer les callbacks pour l'authentification Google iOS dans laquelle je fais le code suivant:

SignIn.SharedInstance.ClientID = "[Client Id Here].apps.googleusercontent.com"; 
SignIn.SharedInstance.Delegate = this;
SignIn.SharedInstance.UIDelegate = this;
SignIn.SharedInstance.SignInUser();

Je recommanderais évidemment de placer cet identifiant de client dans un paramètre de configuration quelque part, alors que j'avais supposé qu'il ne ferait que récupérer l'identifiant du client dans le présent GoogleServices-Info.plist, mais ce n'est pas le cas.

J'ai également le fichier GoogleServices-Info.plist dans mon dossier "Ressources" qui est défini sur BundledResource for build et je l'ai téléchargé à partir de la console de développeur Google pour mon application, puis je l'ai renommé "GoogleServices-Info.plist". prénom. Enfin, je tiens également à préciser le réglage du paramètre 'Entitlements.plist' dans la page de signature d'ensembles iOS sous Personnalisation personnalisée, ce qui vous permet de dépasser l'erreur de chaîne principale que vous verrez inévitablement. N'oubliez pas d'activer le trousseau dans les droits eux-mêmes. 

0
The Senator