web-dev-qa-db-ja.com

| clientID |を指定する必要があります| GIDSignIn | Googleでサインインしようとしたときにエラーが発生しました

GoogleログインはXcode 7で正常に機能していました。Xcode8に更新した後、エラーが発生し始めました:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'You must specify |clientID| for |GIDSignIn|'。 CLIENT_IDを含むGoogleService-Info.plistファイルがあります。

次の行を追加することで修正できました。

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

CLIENT_IDがGoogleService-Info.plistからフェッチされていないようです。コピーバンドルリソースにあることを確認しました。

enter image description here

コードでクライアントIDを指定する必要はありません。 GoogleService-Info.plistファイルから情報を取得するように修正するにはどうすればよいですか?

11
Daniel Que

あなたはこのようにそれを行うことができます。

スイフト:

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

Objective-C

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

これらのコードが順番に配置されていることを確認してください。

_FirebaseApp.configure()

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

FirebaseApp.app()?.options.clientIDは、FirebaseApp.configure()が呼び出された後にのみ、GoogleService-Info.plistからデータを取得できます。

6
Steven

私も同じ問題を抱えていました。実際にはGoogleServices-Info.plist私の場合は更新されていました。再ダウンロードしましたGoogleServices-Info.plistと私のために問題を修正した古いものでそれを更新しました。

1
Zeeshan Tufail

忘れたコードを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

AppDelegateのSwift 3に追加:

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

IOSのXamarinからGoogle SignInを使用してここに到着した場合、残りのプロセスが機能するためには、共有SignInインスタンスでクライアントIDを設定する必要があるようです。 iOS Google認証のコールバックを管理するためのクラスがあり、その中で次のコードを実行します。

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

このクライアントIDは明らかに構成設定のどこかに置くことをお勧めしますが、存在するGoogleServices-Info.plistからクライアントIDを取得するだけだと想定していましたが、取得しませんでした。

また、ビルド用にBundledResourceに設定されている「Resources」フォルダーにGoogleServices-Info.plistがあり、これをアプリのGoogle Developer Consoleからダウンロードして、かなり長いから「GoogleServices-Info.plist」に名前を変更しました。名。最後に、これも注目に値します。特にiOSバンドル署名ページの[カスタム資格]の下にある[Entitlements.plist]設定を設定します。これにより、必然的に表示されるキーチェーンエラーを回避できます。エンタイトルメント自体でも「キーチェーンを有効にする」ことを忘れないでください。

0
The Senator

すべてを実行したにもかかわらず、GIDSignInButtonをタップするとアプリがクラッシュしました。私の場合、clientIDを設定するコードをAppdelegateからGIDSignInButtonが保持されている場所に移動しました(LoginViewControllerによると)。

public override func viewDidLoad() {
    super.viewDidLoad()
    configureViews()
    GIDSignIn.sharedInstance().uiDelegate = self
    GIDSignIn.sharedInstance().delegate = self
    GIDSignIn.sharedInstance().clientID = "Your_ClientID"

}
0
Suraj K Thomas