首页 > 解决方案 > Google One Tap BeginSignIn 失败 (Android)

问题描述

我正在使用 C#、Visual Studio 和 Xamarin 在 Android APP 中实现 Google One Tap。

我的根本问题是我正在使用两台计算机。当我从计算机 A 构建和调试应用程序时,BeginSignIn() 会按预期到达 OnActivityResult()。当我从计算机 B 构建和调试时, BeginSignIn() 总是导致失败侦听器。在这两种情况下,我都将 APP 加载到同一个平板电脑上。在这两种情况下,我都在克隆项目代码而不做任何更改。

由于我使用同一台平板电脑通过 USB 连接到任一计算机进行测试,因此平板电脑上显然保存了一个凭据(因为它在计算机 A 上按预期工作)。

除了我上面描述的东西之外,我还尝试在计算机 B 上构建一个 APK 并将其安装在平板电脑上。这具有相同的结果,即,在调用 BeginSignIn() 之后,它最终进入了失败侦听器。然后我尝试在计算机 A 上构建一个 APK。平板电脑上的这个 FAILED,即在 BeginSignIn() 之后,它转到了失败侦听器。所以,我尝试了 4 种不同的方法:从计算机 A、B 调试和在计算机 A、B 上构建的 APK。在这 4 个中,唯一一个通过登录过程而没有错误的是从计算机 A 调试。

这是用于创建请求数据包的片段。它非常接近文档页面上关于 Google One Tap的代码,除了这是 C# 而不是 Java。

TheBeginSignInRequest = new BeginSignInRequest.Builder()
     .SetPasswordRequestOptions(new PasswordRequestOptions.Builder()
         .SetSupported(true)
         .Build())
     .SetGoogleIdTokenRequestOptions(
          new GoogleIdTokenRequestOptions.Builder()
                 .SetSupported(true)
          // Your server's client ID, not your Android client ID.
          .SetServerClientId(
               GetString(Resource.String.default_web_client_id))
          .SetFilterByAuthorizedAccounts(false)
          .Build())
      .SetAutoSelectEnabled(false)
      .Build();

这是启动 BeginSignIn 的片段。在计算机 A 上,这会导致 Complete 和 Success 侦听器。在计算机 B 上,这会导致 Complete 和 Failure 侦听器。

Log.Info("bob", "SignInButton_Click: sign in.");
var SignInTask = TheOneTap_SignInClient.BeginSignIn(TheBeginSignInRequest);
SignInTask.AddOnCanceledListener(this);
SignInTask.AddOnCompleteListener(this);
SignInTask.AddOnSuccessListener(this);
SignInTask.AddOnFailureListener(this);

这是来自计算机 A 的日志。我只包括到 OnSuccess() 的日志,因为它相当于计算机 B 上的 OnFailure()。

10-11 16:18:00.091 14053 14053 I bob     : SignInButton_Click: sign in.
10-11 16:18:00.149   866  2818 D AccountManagerService: getUserAccounts0
10-11 16:18:00.171   866  2818 D AccountManagerService: getUserAccounts0
10-11 16:18:00.173   866  1568 D AccountManagerService: getUserAccounts0
10-11 16:18:00.173   866  1778 D AccountManagerService: getUserAccounts0
10-11 16:18:00.174   866  1778 I chatty  : uid=1000(system) Binder:866_E identical 1 line
10-11 16:18:00.175   866  1778 D AccountManagerService: getUserAccounts0
10-11 16:18:00.176   866  2818 D AccountManagerService: getUserAccounts0
10-11 16:18:00.177   866  2818 I chatty  : uid=1000(system) Binder:866_11 identical 1 line
10-11 16:18:00.180   866  2818 D AccountManagerService: getUserAccounts0
10-11 16:18:00.182   866  4626 D AccountManagerService: getUserAccounts0
10-11 16:18:00.184   866  4626 D AccountManagerService: getUserAccounts0
10-11 16:18:00.185   866  2818 D AccountManagerService: getUserAccounts0
10-11 16:18:00.188   866  4626 D AccountManagerService: getUserAccounts0
10-11 16:18:00.190   866  2818 D AccountManagerService: getUserAccounts0
10-11 16:18:00.190   866  2818 D AccountManagerService: getUserAccounts0
10-11 16:18:00.201  1594  1610 I System.out: (HTTPLog)-Static: isSBSettingEnabled false
10-11 16:18:00.201  1594  1610 I System.out: (HTTPLog)-Static: isSBSettingEnabled false
10-11 16:18:00.326   866  4626 D AccountManagerService: getUserAccounts0
10-11 16:18:00.327  1594  1610 E Auth    : [GoogleAccountDataServiceImpl] getToken() -> NEED_REMOTE_CONSENT. App: com.SalmonCreekGames.SolitaireMobile, Service: oauth2:openid
10-11 16:18:00.346 14053 14053 I bob     : OnComplete()
10-11 16:18:00.404 14053 14053 I bob     : OnSuccess.  result=com.google.android.gms.auth.api.identity.BeginSignInResult@5da485a

这是来自计算机 B 的日志片段,显示了它是如何在故障侦听器处结束的。

10-11 16:27:34.251 15767 15767 I bob     : SignInButton_Click: sign in.
10-11 16:27:34.329   866   919 D AccountManagerService: getUserAccounts0
10-11 16:27:34.356  9625  9625 D BoundBrokerSvc: onBind: Intent { act=com.google.android.gms.chromesync.service.zeroparty.START cmp=com.google.android.gms/.chimera.GmsApiService }
10-11 16:27:34.357  9625  9625 D BoundBrokerSvc: Loading bound service for intent: Intent { act=com.google.android.gms.chromesync.service.zeroparty.START cmp=com.google.android.gms/.chimera.GmsApiService }
10-11 16:27:34.372   866  4582 D ConnectivityService: filterNetworkStateForUid() uid: 10019, pid: 1594
10-11 16:27:34.372   866  4582 D ConnectivityService: isNetworkWithLinkPropertiesBlocked: uid=10019, vpn=DISCONNECTED,false
10-11 16:27:34.372   866  4582 D ConnectivityService: filterNetworkStateForUid() uid: 10019, pid: 1594, networkInfo: [type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), failover: false, available: true, roaming: false]
10-11 16:27:34.379   866  1775 D AccountManagerService: getUserAccounts0
10-11 16:27:34.384   866  1775 D AccountManagerService: getUserAccounts0
10-11 16:27:34.385  9625  9625 D BoundBrokerSvc: onBind: Intent { act=com.google.android.gms.auth.key.retrieval.service.START cmp=com.google.android.gms/.chimera.GmsApiService }
10-11 16:27:34.385  9625  9625 D BoundBrokerSvc: Loading bound service for intent: Intent { act=com.google.android.gms.auth.key.retrieval.service.START cmp=com.google.android.gms/.chimera.GmsApiService }
10-11 16:27:34.385   866  1775 D AccountManagerService: getUserAccounts0
10-11 16:27:34.387   866  2944 D AccountManagerService: getUserAccounts0
10-11 16:27:34.392   866   919 D AccountManagerService: getUserAccounts0
10-11 16:27:34.392   866  2944 D AccountManagerService: getUserAccounts0
10-11 16:27:34.394   866  2944 D AccountManagerService: getUserAccounts0
10-11 16:27:34.394   866   919 D AccountManagerService: getUserAccounts0
10-11 16:27:34.394   866  2944 D AccountManagerService: getUserAccounts0
10-11 16:27:34.396   866  2944 D AccountManagerService: getUserAccounts0
10-11 16:27:34.396   866   919 D AccountManagerService: getUserAccounts0
10-11 16:27:34.398   866   919 D AccountManagerService: getUserAccounts0
10-11 16:27:34.398   866  2944 D AccountManagerService: getUserAccounts0
10-11 16:27:34.401   866  2944 D AccountManagerService: getUserAccounts0
10-11 16:27:34.402   866   919 D AccountManagerService: getUserAccounts0
10-11 16:27:34.403   866  2944 D AccountManagerService: getUserAccounts0
10-11 16:27:34.404   866  2944 D AccountManagerService: getUserAccounts0
10-11 16:27:34.405   866   919 D AccountManagerService: getUserAccounts0
10-11 16:27:34.409   866  2944 D AccountManagerService: getUserAccounts0
10-11 16:27:34.416  1594 22041 I System.out: (HTTPLog)-Static: isSBSettingEnabled false
10-11 16:27:34.416  1594 22041 I System.out: (HTTPLog)-Static: isSBSettingEnabled false
10-11 16:27:34.419  1594 29593 I System.out: (HTTPLog)-Static: isSBSettingEnabled false
10-11 16:27:34.419  1594 29593 I System.out: (HTTPLog)-Static: isSBSettingEnabled false
10-11 16:27:34.524   866  1775 D AccountManagerService: getUserAccounts0
10-11 16:27:34.529   866  1775 D AccountManagerService: getUserAccounts0
10-11 16:27:34.559 15767 15767 I bob     : OnComplete()
10-11 16:27:34.618 15767 15767 I bob     : OnFailure.
Computer A:
    Windows 10 Pro   Version 21H1   19043.1237
    Visual Studio Community   Version 16.8.4
Computer B:
    Windows 10 Home  Version 20H2   19042.1237
    Visual Studio Community   Version 16.11.12
Tablet
    Samsung SM-T380
    Android Version 9
    

标签: androidauthenticationgoogle-one-tap

解决方案


推荐阅读