在 Android 上使用 Google 登录时出现 Google 登录错误:状态代码:SIGN_IN_REQUIRED

Ome*_*zer 4 android google-api google-plus google-play

每次我尝试使用 Google API 登录时,都会收到以下错误。我的清单具有适当的权限,并且我确实相应地创建了我的凭据。所以我不知道问题是什么。同意屏幕也不会显示。

\n\n
com.omer.notetoself D/NTS:\xef\xb9\x95 ConnectionResult{statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent{3678d5c: android.os.BinderProxy@19bcbe30}, message=null}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n
  package com.omer.notetoself;\n\n    import android.app.Activity;\n    import android.content.Intent;\n    import android.content.IntentSender;\n    import android.os.Bundle;\n    import android.util.Log;\n    import android.view.Menu;\n    import android.view.MenuItem;\n    import android.view.View;\n    import android.widget.Button;\n    import android.widget.EditText;\n\n    import com.google.android.gms.common.ConnectionResult;\n    import com.google.android.gms.common.Scopes;\n    import com.google.android.gms.common.api.GoogleApiClient;\n    import com.google.android.gms.common.api.Scope;\n    import com.google.android.gms.plus.Plus;\n\n\n     `public class Activity_Login extends Activity implements View.OnClickListener,GoogleApiClient.ConnectionCallbacks,\n        GoogleApiClient.OnConnectionFailedListener{` \n\n\n    private static final int RC_SIGN_IN = 0;\n    private GoogleApiClient mGoogleApiClient;\n    /* Is there a ConnectionResult resolution in progress? */\n    private boolean mIsResolving = false;\n\n    /* Should we automatically resolve ConnectionResults when possible? */\n    private boolean mShouldResolve = false;\n\n\n    EditText editText_userName;\n    EditText editText_password;\n\n    Button button_facebook_login;\n    Button button_google_login;\n    Button button_login;\n    Button button_signUp;\n\n    String userName;\n    String password;\n\n    @Override\n    protected void onStop() {\n        super.onStop();\n        mGoogleApiClient.disconnect();\n    }\n\n    @Override\n    protected void onStart() {\n        super.onStart();\n        mGoogleApiClient.connect();\n    }\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_login);\n\n        editText_userName = (EditText)findViewById(R.id.editText_username);\n        editText_password = (EditText)findViewById(R.id.editText_password);\n        button_login = (Button)findViewById(R.id.button_login);\n        button_facebook_login = (Button)findViewById(R.id.button_facebook);\n        button_google_login = (Button)findViewById(R.id.button_google);\n\n        button_signUp = (Button)findViewById(R.id.button_signup);\n        button_login.setOnClickListener(this);\n        button_signUp.setOnClickListener(this);\n        button_facebook_login.setOnClickListener(this);\n        button_google_login.setOnClickListener(this);\n\n\n        //GOOGLE+ API\n\n        mGoogleApiClient = new GoogleApiClient.Builder(this)\n                .addConnectionCallbacks(this)\n                .addOnConnectionFailedListener(this)\n                .addApi(Plus.API)\n                .addScope(new Scope(Scopes.PROFILE))\n                .addScope(new Scope(Scopes.EMAIL))\n                .build();\n    }\n\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        // Inflate the menu; this adds items to the action bar if it is present.\n        getMenuInflater().inflate(R.menu.menu_activity_login, menu);\n        return true;\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        // Handle action bar item clicks here. The action bar will\n        // automatically handle clicks on the Home/Up button, so long\n        // as you specify a parent activity in AndroidManifest.xml.\n        int id = item.getItemId();\n\n        //noinspection SimplifiableIfStatement\n        if (id == R.id.action_settings) {\n            return true;\n        }\n\n        return super.onOptionsItemSelected(item);\n    }\n\n    @Override\n    public void onClick(View v) {\n        switch(v.getId()){\n            case R.id.button_login: //AUTHENTICATE PARSE\n                userName = editText_userName.getText().toString().trim();\n                password = editText_password.getText().toString().trim();\n                AppUtilities.parseLogin(this, userName, password);\n                break;\n            case R.id.button_signup: //LAUNCH SIGN UP ACTIVITY\n                Intent intent = new Intent(\n                        Activity_Login.this,\n                        Activity_SignUp.class);\n                startActivity(intent);\n                break;\n            case R.id.button_facebook:\n\n                AppUtilities.facebookLogin(this);\n                break;\n            case R.id.button_google:\n                initGoogle();\n\n\n\n                break;\n\n        }\n\n    }\n\n    public void initGoogle(){\n        mGoogleApiClient.connect();\n    }\n\n    @Override\n    public void onConnected(Bundle bundle) {\n        String email = Plus.AccountApi.getAccountName(mGoogleApiClient);\n        AppUtilities.googleLogin(this,email);\n    }\n\n    @Override\n    public void onConnectionSuspended(int i) {\n\n    }\n\n    @Override\n    public void onConnectionFailed(ConnectionResult connectionResult) {\n        AppUtilities.log(connectionResult.toString());\n\n\n        if (!mIsResolving && mShouldResolve) {\n            if (connectionResult.hasResolution()) {\n                try {\n                    connectionResult.startResolutionForResult(this, RC_SIGN_IN);\n                    mIsResolving = true;\n                } catch (IntentSender.SendIntentException e) {\n                    Log.e(AppUtilities.TAG, "Could not resolve ConnectionResult.", e);\n                    mIsResolving = false;\n                    mGoogleApiClient.connect();\n                }\n            } else {\n                // Could not resolve the connection result, show the user an\n                // error dialog.\n                //showErrorDialog(connectionResult);\n            }\n        } else {\n            // Show the signed-out UI\n            //showSignedOutUI();\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Geo*_*per 6

确保 Google 开发者控制台中应用程序的 SHA-1 签名证书指纹属于用于签署您正在测试的 APK 的同一密钥。

默认情况下,在编译调试版本时 Android Studio 使用自己的调试密钥。您可以通过右键单击应用程序并选择“打开模块设置”来更改它。转到“签名”选项卡并配置您在开发控制台中提到的相同密钥。之后导航到“构建类型”选项卡并选择您的签名配置。