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からフェッチされていないようです。コピーバンドルリソースにあることを確認しました。
コードでクライアントIDを指定する必要はありません。 GoogleService-Info.plistファイルから情報を取得するように修正するにはどうすればよいですか?
あなたはこのようにそれを行うことができます。
スイフト:
GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
Objective-C:
GIDSignIn.sharedInstance.clientID = FIRApp.defaultApp.options.clientID;
これらのコードが順番に配置されていることを確認してください。
_FirebaseApp.configure()
GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
GIDSignIn.sharedInstance().delegate = self
_
FirebaseApp.app()?.options.clientID
は、FirebaseApp.configure()
が呼び出された後にのみ、GoogleService-Info.plistからデータを取得できます。
私も同じ問題を抱えていました。実際にはGoogleServices-Info.plist
私の場合は更新されていました。再ダウンロードしましたGoogleServices-Info.plist
と私のために問題を修正した古いものでそれを更新しました。
忘れたコードを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
AppDelegateのSwift 3に追加:
var configureError: NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \
(String(describing: configureError))")
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]設定を設定します。これにより、必然的に表示されるキーチェーンエラーを回避できます。エンタイトルメント自体でも「キーチェーンを有効にする」ことを忘れないでください。
すべてを実行したにもかかわらず、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"
}