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.
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?
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;
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()
.
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.
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
Swift 3 Dans AppDelegate ajouter:
var configureError: NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \
(String(describing: configureError))")
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.