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.serverAuthCodenil,我需要传递这个服务器验证码,呃,在服务器上验证用户.

我读了 this documentation page,它说我必须设置 [GIDSignIn sharedInstance]serverClientID 属性,但是 无处可去 是否说明我在哪里可以找到这个 "server client id"。我运行测试了世界上所有的钥匙都无济于事。

然后我发现 this documentation page 看起来它试图告诉我们在哪里可以找到这个神奇的 id,但它的措辞很糟糕并且没有帮助。我确实有 Web application 类型的 OAuth2 凭据,但是:

  1. 它们用于网络(客户端)应用程序,对应于我的 iOS 应用程序,它也与服务器通信
  2. 我尝试使用它,但没有用。

有没有人成功逃脱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.plistREVERSED_CLIENT_ID 的值。
  • serverClientID 使用 Google Console.
  • 中的相应值

您需要确保 [GIDSignIn sharedInstance].serverClientID 属性 已设置;该值可以在 Google API 控制台中找到。

此外,如果您得到 user.serverAuthCodenil 值,请确保在任何后续尝试之前调用了 [[GIDSignIn sharedInstance] signOut];。否则[GIDSignIn sharedInstance] 好像还记得以前的配置。

我在模拟器中获取 serverAuthCode 没问题。

改为从 user 获取访问令牌:

NNString* accessToken = user.authentication.accessToken;

有同样的问题。 GIDSignIn.sharedInstance().serverClientIDGIDSignIn.sharedInstance().clientID 相同。 也通过设置 serverClientId 来解决。