Google Objective-C 中的用户 serverAuthCode nil
Google User serverAuthCode nil in Objective-C
我正在尝试将 GoogleSignIn
框架集成到 iOS 应用程序中,并在服务器上对用户进行身份验证。我成功登录了用户,但是在- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error
委托方法中,user.serverAuthCode
是nil
,我需要传递这个服务器验证码,呃,在服务器上验证用户.
我读了 this documentation page,它说我必须设置 [GIDSignIn sharedInstance]
的 serverClientID
属性,但是 无处可去 是否说明我在哪里可以找到这个 "server client id"。我运行测试了世界上所有的钥匙都无济于事。
然后我发现 this documentation page 看起来它试图告诉我们在哪里可以找到这个神奇的 id,但它的措辞很糟糕并且没有帮助。我确实有 Web application
类型的 OAuth2 凭据,但是:
- 它们用于网络(客户端)应用程序,对应于我的 iOS 应用程序,它也与服务器通信
- 我尝试使用它,但没有用。
有没有人成功逃脱Google(可怜)文档的魔掌?
在模拟器中尝试 NOT 运行 :)
您可以在 plist 中找到 client_id,并且
server_client_id 你可以通过API控制台管理器找到。
您必须先删除应用程序,然后再尝试,模拟器或设备都可以。
使用此配置得到一个 serverAuthCode
而不是 nil
:
NSError *configureError;
[[GGLContext sharedInstance] configureWithError:&configureError];
NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
[GIDSignIn sharedInstance].clientID = @"88.....apps.googleusercontent.com";
[GIDSignIn sharedInstance].serverClientID = @"88.....apps.googleusercontent.com" ;
[GIDSignIn sharedInstance].shouldFetchBasicProfile = YES;
[GIDSignIn sharedInstance].scopes = @[@"email", @"profile"];
其中:
clientID
使用 GoogleService-Info.plist
中 REVERSED_CLIENT_ID
的值。
serverClientID
使用 Google Console
. 中的相应值
您需要确保 [GIDSignIn sharedInstance].serverClientID
属性 已设置;该值可以在 Google API 控制台中找到。
此外,如果您得到 user.serverAuthCode
和 nil
值,请确保在任何后续尝试之前调用了 [[GIDSignIn sharedInstance] signOut];
。否则[GIDSignIn sharedInstance]
好像还记得以前的配置。
我在模拟器中获取 serverAuthCode
没问题。
改为从 user
获取访问令牌:
NNString* accessToken = user.authentication.accessToken;
有同样的问题。 GIDSignIn.sharedInstance().serverClientID
与 GIDSignIn.sharedInstance().clientID
相同。
也通过设置 serverClientId
来解决。
我正在尝试将 GoogleSignIn
框架集成到 iOS 应用程序中,并在服务器上对用户进行身份验证。我成功登录了用户,但是在- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error
委托方法中,user.serverAuthCode
是nil
,我需要传递这个服务器验证码,呃,在服务器上验证用户.
我读了 this documentation page,它说我必须设置 [GIDSignIn sharedInstance]
的 serverClientID
属性,但是 无处可去 是否说明我在哪里可以找到这个 "server client id"。我运行测试了世界上所有的钥匙都无济于事。
然后我发现 this documentation page 看起来它试图告诉我们在哪里可以找到这个神奇的 id,但它的措辞很糟糕并且没有帮助。我确实有 Web application
类型的 OAuth2 凭据,但是:
- 它们用于网络(客户端)应用程序,对应于我的 iOS 应用程序,它也与服务器通信
- 我尝试使用它,但没有用。
有没有人成功逃脱Google(可怜)文档的魔掌?
在模拟器中尝试 NOT 运行 :)
您可以在 plist 中找到 client_id,并且 server_client_id 你可以通过API控制台管理器找到。
您必须先删除应用程序,然后再尝试,模拟器或设备都可以。
使用此配置得到一个 serverAuthCode
而不是 nil
:
NSError *configureError;
[[GGLContext sharedInstance] configureWithError:&configureError];
NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
[GIDSignIn sharedInstance].clientID = @"88.....apps.googleusercontent.com";
[GIDSignIn sharedInstance].serverClientID = @"88.....apps.googleusercontent.com" ;
[GIDSignIn sharedInstance].shouldFetchBasicProfile = YES;
[GIDSignIn sharedInstance].scopes = @[@"email", @"profile"];
其中:
clientID
使用GoogleService-Info.plist
中REVERSED_CLIENT_ID
的值。serverClientID
使用Google Console
. 中的相应值
您需要确保 [GIDSignIn sharedInstance].serverClientID
属性 已设置;该值可以在 Google API 控制台中找到。
此外,如果您得到 user.serverAuthCode
和 nil
值,请确保在任何后续尝试之前调用了 [[GIDSignIn sharedInstance] signOut];
。否则[GIDSignIn sharedInstance]
好像还记得以前的配置。
我在模拟器中获取 serverAuthCode
没问题。
改为从 user
获取访问令牌:
NNString* accessToken = user.authentication.accessToken;
有同样的问题。 GIDSignIn.sharedInstance().serverClientID
与 GIDSignIn.sharedInstance().clientID
相同。
也通过设置 serverClientId
来解决。