谷歌登录无法正常工作?

Posted

技术标签:

【中文标题】谷歌登录无法正常工作?【英文标题】:Google sign in not working android? 【发布时间】:2016-03-23 07:28:44 【问题描述】:

所以我的项目遇到的一个问题是通过 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 : ActivityRecord1458bd29 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 : ActivityRecordd3e4299 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

【问题讨论】:

澄清一下,登录窗口正在显示,对吗?然后当你点击登录时,登录就失败了? @DuhProgrammer13:是的,就是这样。 对这个问题有什么吸引力吗?我在他们的示例代码中也遇到了这个问题。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

我遇到了同样的问题。 我通过执行以下操作解决了它:

    我进入了我的 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) 的底部,即在依赖项之后

    我生成了一个新的 SHA-1 密钥。要生成 SHA-1 密钥,请将其粘贴到您的终端中:keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android 然后转到您的credentials page 并选择您的项目。

    在 OAuth 2.0 客户端下,单击您的 android 客户端密钥。按照指示粘贴您生成的 SHA-1 密钥和包名称。点击保存。

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

然后尝试重新登录。希望它应该工作。 有关详细信息,请参阅 post 和 this as well。它帮助我解决了我的问题

【讨论】:

太棒了!感谢您的详细步骤。步骤 2、3 和 4 对我有用。不要忘记删除现有的应用程序并清理,首先构建应用程序【参考方案3】:

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

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

然后它起作用了。

【讨论】:

【参考方案4】:

我遇到了同样的问题。当按下登录按钮时,

它会再次启动注册活动 logcat 登录失败 “活动”变量将始终保持为空。

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

    列表项

【讨论】:

【参考方案5】:

我在我的项目中遇到了同样的问题并解决了我生成的 SHA1 密钥

Step1- 在右侧打开 gradle

Step2- 点击图片上的执行 Gradle 任务

Step3- 写gradle signingreport 并回车

Step4-复制SHA1密钥

第 5 步 - 转到您的 Firebase 控制台并转到项目设置

第 6 步 - 在您的 SDK 设置和配置中点击 添加指纹 并将您的 SHA1 密钥粘贴到此处并点击保存

然后就成功了

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

然后你注销并尝试再次登录然后问题发生了。

解决方法很简单。

我做错的是,当用户从应用程序注销时,我没有从谷歌signout 并且缓存不清除,这就是问题发生的时候。

当您尝试再次登录时,只需从 google 执行 signOut,这将确保如果应用程序中有任何可用于 google 登录的缓存,它将被清除。

【讨论】:

谢谢我以前是通过 Firebase 注销但不是 google 注销

以上是关于谷歌登录无法正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

来自appDelegate performSegue的Swift 3在谷歌登录后无法正常工作

使用cordova 进行谷歌登录将无法正常工作。 Android中的错误10和IOS中的错误请求

谷歌登录 - 不能在生产中工作[重复]

Android:谷歌登录在发布模式下不起作用[关闭]

谷歌地图 fitBounds 无法正常工作

如何从ios中的谷歌帐户注销?