【问题标题】:Google User serverAuthCode nil in Objective-CObjective-C 中的 Google 用户 serverAuthCode nil
【发布时间】:2016-06-14 06:36:54
【问题描述】:

我正在尝试将 GoogleSignIn 框架集成到 iOS 应用程序中,并在服务器上对用户进行身份验证。我设法登录了用户,但是在- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error委托方法中,user.serverAuthCodenil,我需要将这个服务器验证码传递给,呃,在服务器上验证用户。

我阅读了this documentation page,它指出我必须设置[GIDSignIn sharedInstance]serverClientID 属性,但是无处 没有说明我在哪里可以找到这个“服务器客户端ID”。我用世界上所有的钥匙进行了测试,但无济于事。

然后我发现this documentation page 似乎在试图告诉我们在哪里可以找到这个神奇的 id,但它使用的措辞很差,没有帮助。我确实有类型为 Web application 的 OAuth2 凭据,但是:

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

有没有人成功地摆脱了 Google (可怜的) 文档的控制?

【问题讨论】:

  • 只需在 AppDelegate 中添加 [GIDSignIn sharedInstance].serverClientID = "Client_ID"

标签: ios objective-c google-signin


【解决方案1】:

尝试在模拟器中运行它:)

【讨论】:

  • 它也发生在我的设备上.. serverAuthCode 为 nil
  • 不知道为什么其他人不赞成。这正是我的情况。我正在使用 Xamarin。
  • 我使用的是 iPhone 5S 模拟器(带有 iOS 8.4),它不会给我一个非零serverAuthCode。切换到设备修复它。有谁知道为什么模拟器在这里不起作用?
  • 如果我在使用模拟器时卡住了怎么办?
  • @BabkenVardanyan,不知道。自 2016 年以来,情况可能发生了变化。其他答案对您有帮助吗?
【解决方案2】:

您可以在 plist 中找到 client_id,并且 server_client_id 可以通过 API 控制台管理器找到。

你必须先删除应用程序,然后再试一次,模拟器或设备,它会工作。

【讨论】:

    【解决方案3】:

    使用此配置获取不是nilserverAuthCode

    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 的对应值。

    【讨论】:

    • 是否需要[GGLContext configureWithError]?是否需要 @"email"@"profile" 范围? (shouldFetchBasicProfile 不会自动添加这些吗?)
    【解决方案4】:

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

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

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

    【讨论】:

    • signOut 部分有效。在尝试新代码之前,请务必退出。
    【解决方案5】:

    改为从user 获取访问令牌:

    NNString* accessToken = user.authentication.accessToken;
    

    【讨论】:

    • 你确定服务器授权码和访问令牌是一样的吗?
    • @IulianOnofrei 您正在使用身份验证代码在服务器端获取访问令牌,对吧?为什么不直接使用访问令牌。
    【解决方案6】:

    遇到了同样的问题。 GIDSignIn.sharedInstance().serverClientIDGIDSignIn.sharedInstance().clientID 相同。 也可以通过设置serverClientId 来解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      相关资源
      最近更新 更多