谷歌登录在安卓手机上无法使用?

9

我的项目遇到的问题是通过Google登录不一致。例如,它对于我的朋友有效,但对于我从我的计算机无效,即使昨天在清除我的电话(电话已损坏)之前它也对我有效。我们的登录代码是标准的Google登录,问题在于结果一直返回false。以下是代码:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.welcome_screen);
        findViewById(R.id.sign_in_button).setOnClickListener(this);

        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();

        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build();

        SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button);
        signInButton.setSize(SignInButton.SIZE_STANDARD);
        signInButton.setScopes(gso.getScopeArray());

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.sign_in_button:
                signIn();
                break;
        }
    }   

private void signIn() {
        Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            handleSignInResult(result);
        }
    }

    private void handleSignInResult(GoogleSignInResult result) {
        if (result.isSuccess()) {
            // Signed in successfully, show authenticated UI.
            GoogleSignInAccount acct = result.getSignInAccount();

//            mStatusTextView.setText(getString(R.string.signed_in_fmt, acct.getDisplayName()));
            updateUI(acct);
        } else {
            // Signed out, show unauthenticated UI.
            noUpdateUI();
        }
    }

    private void updateUI(GoogleSignInAccount acct) {
        Intent intent = new Intent(getApplicationContext(), HomeScreen.class);

        Bundle bundle = new Bundle();
        bundle.putSerializable("NEW_USER", new ClientUser(acct));
        intent.putExtras(bundle);

        startActivity(intent);
    }


For some reason, the result is false:

    private void noUpdateUI() {
        System.out.println("**** Try again****");
//        mStatusTextView.setText(R.string.signed_out);
        findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
    }

我认为我已经正确设置了我的应用程序凭据,因为在我擦拭手机之前它以前可以在我的台式电脑上工作。值得注意的是,我的朋友在他的笔记本电脑上遇到了同样的问题,但在他的台式电脑上没有这个问题。不确定出了什么问题,有什么建议吗?
sys.out 的日志:
12-16 18:48:43.282 27375-27375/oose2017.place2b D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
12-16 18:48:43.412 27375-27375/oose2017.place2b I/Timeline: Timeline: Activity_launch_request id:oose2017.place2b time:3231784
12-16 18:48:43.452 27375-27375/oose2017.place2b D/Activity: performCreate Call Injection manager
12-16 18:48:43.462 27375-27375/oose2017.place2b I/InjectionManager: dispatchOnViewCreated > Target : com.google.android.gms.auth.api.signin.internal.SignInHubActivity isFragment :false
12-16 18:48:43.462 27375-27375/oose2017.place2b D/PhoneWindow: *FMB* installDecor mIsFloating : false
12-16 18:48:43.462 27375-27375/oose2017.place2b D/PhoneWindow: *FMB* installDecor flags : 8454400
12-16 18:48:43.462 27375-27375/oose2017.place2b D/SecWifiDisplayUtil: Metadata value : SecSettings2
12-16 18:48:43.472 27375-27375/oose2017.place2b D/PhoneWindow: *FMB* isFloatingMenuEnabled mFloatingMenuBtn : null
12-16 18:48:43.472 27375-27375/oose2017.place2b D/PhoneWindow: *FMB* isFloatingMenuEnabled return false
12-16 18:48:43.482 27375-27375/oose2017.place2b D/SRIB_DCS: log_dcs ThreadedRenderer::initialize entered! 
12-16 18:48:43.492 27375-27584/oose2017.place2b D/mali_winsys: new_window_surface returns 0x3000,  [1440x2560]-format:1
12-16 18:48:43.542 27375-27375/oose2017.place2b I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@174719e3 time:3231916
12-16 18:48:43.962 27375-27375/oose2017.place2b V/ActivityThread: updateVisibility : ActivityRecord{1458bd29 token=android.os.BinderProxy@e9978a8 {oose2017.place2b/oose2017.place2b.interfaces.Welcome.WelcomeScreen}} show : true
12-16 18:48:43.962 27375-27375/oose2017.place2b V/ActivityThread: updateVisibility : ActivityRecord{d3e4299 token=android.os.BinderProxy@174719e3 {oose2017.place2b/com.google.android.gms.auth.api.signin.internal.SignInHubActivity}} show : true
12-16 18:48:48.102 27375-27375/oose2017.place2b I/System.out: ***** Try again!*****
12-16 18:48:48.132 27375-27375/oose2017.place2b I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@e9978a8 time:3236507

只是想澄清一下,登录窗口已经显示出来了,对吗?然后当您点击登录时,登录就失败了? - KodyVanRy
@DuhProgrammer13:是的,那就是情况。 - bianca
这个问题有任何进展吗?我在他们的示例代码中也遇到了这个问题。 - bianca
7个回答

10

我曾经也遇到了同样的问题,下面是我的解决步骤:

  1. 打开 build.gradle(app) 文件,在 defaultConfig 中将 applicationId 改为你的包名(我不知道为什么一开始它们不一样)。 将 compile 'com.google.android.gms:play-services-auth:8.3.0' 切换为 compile 'com.google.android.gms:play-services-auth:8.4.0' 确保 apply plugin: 'com.google.gms.google-services' 在 build.gradle(app) 的最底部,即在 dependencies 后面。

  2. 生成一个新的 SHA-1 密钥。在终端中输入以下命令以生成 SHA-1 密钥:keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android 然后转到你的凭据页面并选择你的项目。

  3. 在 OAuth 2.0 客户端下,点击你的 Android 客户端密钥。按照指示粘贴你生成的 SHA-1 密钥和你的包名。点击保存。

    1. 下载一个新的 google-services.json 文件并将其粘贴到你的 app/ 目录中。

然后再次尝试登录。希望它能够工作。 如需更多信息,请参见此帖子这个。它们帮助我解决了我的问题。


太好了!感谢详细的步骤。第二、三和四步对我有用。不要忘记先删除现有应用程序并清理、构建应用程序。 - Qadir Hussain

2
我在我的项目中遇到了同样的问题,并解决了生成SHA1密钥的问题。
步骤1- 在右侧打开gradle。
步骤2- 点击图像上的执行Gradle任务
步骤3- 输入gradle signingreport并按Enter键。

enter image description here

步骤4- 复制SHA1密钥enter image description here 步骤5 - 前往Firebase控制台并转到项目设置enter image description here 步骤6 - 在SDK设置和配置中,单击添加指纹,将您的SHA1密钥粘贴到此处,然后单击保存enter image description here 然后它就可以工作了。

1

我有同样的问题。我正在开发一个react-native应用程序,我正在使用expo-google-sign-in,android的google登录在应用程序加载时第一次起作用。

然后你注销并尝试再次登录,然后问题就出现了。

解决方案很简单。

我的错误在于当用户从应用程序注销时,我没有从google中signout,缓存没有清除,这就是问题出现的原因。

只需在尝试重新登录时从google中进行signOut,这将确保如果应用程序中存在任何可用于google登录的缓存,则会清除它。


谢谢,我以前是通过 Firebase 注销而不是 Google 注销。 - IceFox_Programming

0

在创建GoogleSignInOptions时,您需要附加您的Android客户端密钥,就像这样

  signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).
            requestScopes(new Scope(Scopes.EMAIL)).
            requestEmail().
            requestIdToken(getString(R.string.client_id)).
            build();

在哪里可以找到“client_id”,因为我的客户端ID不能使用? - gaurav kumar

0

我不得不从play-services-auth 16.0.0降级到

implementation 'com.google.android.gms:play-services-auth:15.0.1'

然后它就工作了。

0

重要通知 Google登录意图在非.xml格式的标志文件上存在问题。 如果您的应用程序标志不是.xml格式,则登录弹出窗口将显示透明背景并停止运行,android的onActivityResult将返回resultCode0


0

我也遇到了同样的问题。当点击 Sign-In 按钮时,

  • 它只会重新启动注册活动
  • 在 logcat 中显示登录失败
  • "activity" 变量始终为 null。

我仔细检查了一切都没有问题。我在 Firebase 控制台中解决了这个问题。前往身份验证>登录方法并在登录提供程序中启用Google选项

  1. 列表项

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接