your with tool tag manager google from for developers container apps android android-activity google-play-services google-api-java-client google-signin

android - with - google tag manager tool



Google Sign-In para Android (2)

Intenté la documentación del desarrollador de Google e intenté iniciar sesión en mi aplicación. El código se copia del git con códigos agregados de la documentación. y definido en LoginActivity como

Public class LoginActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener, View.OnClickListener { private static final String TAG = "* * SignIn * *"; private static final int RC_SIGN_IN = 9001; private GoogleApiClient mGoogleApiClient; private ProgressDialog mProgressDialog; Bundle userData = new Bundle(); Intent newIntent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); findViewById(R.id.sign_in_button).setOnClickListener(this); // [START configure_signin] // Configure sign-in to request the user''s ID, email address, and basic // profile. ID and basic profile are included in DEFAULT_SIGN_IN. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); // [END configure_signin] // [START build_client] mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); // [END build_client] // [START customize_button] SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD); signInButton.setScopes(gso.getScopeArray()); // [END customize_button] } @Override public void onStart() { super.onStart(); OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient); if (opr.isDone()) { Log.d(TAG, "Got cached sign-in"); GoogleSignInResult result = opr.get(); handleSignInResult(result); } else { showProgressDialog(); opr.setResultCallback(new ResultCallback<GoogleSignInResult>() { @Override public void onResult(GoogleSignInResult googleSignInResult) { hideProgressDialog(); handleSignInResult(googleSignInResult); } }); } } // [START onActivityResult] @Override 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); } } // [END onActivityResult] // [START handleSignInResult] private void handleSignInResult(GoogleSignInResult result) { Log.d(TAG, "handleSignInResult:" + result.isSuccess()); if (result.isSuccess()) { // Signed in successfully, show authenticated UI. GoogleSignInAccount acct = result.getSignInAccount(); userData.putString("Username", acct.getDisplayName()); userData.putString("Email",acct.getEmail()); newIntent = new Intent(LoginActivity.this, MainActivity.class); newIntent.putExtras(userData); startActivity(newIntent); finish(); } else { userData.putString("Username", "Anonymous"); userData.putString("Email","www.example.com"); newIntent = new Intent(LoginActivity.this, MainActivity.class); newIntent.putExtras(userData); startActivity(newIntent); finish(); } } // [END handleSignInResult] // [START signIn] private void signIn() { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, RC_SIGN_IN); } // [END signIn] @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.d(TAG, "onConnectionFailed:" + connectionResult); } private void showProgressDialog() { if (mProgressDialog == null) { mProgressDialog = new ProgressDialog(this); mProgressDialog.setMessage("Please wait"); mProgressDialog.setIndeterminate(true); } mProgressDialog.show(); } private void hideProgressDialog() { if (mProgressDialog != null && mProgressDialog.isShowing()) { mProgressDialog.hide(); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.sign_in_button: signIn(); break; } }

}

Pero recibo el siguiente registro de error . como

12-16 23:02:44.074 5545-5545/com.example.www.newapp E/AndroidRuntime: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=40962, result=-1, data=Intent { (has extras) }} to activity {com.example.www.newapp/com.google.android.gms.auth.api.signin.internal.SignInHubActivity}: java.lang.NullPointerException: Attempt to invoke virtual method ''java.lang.Class java.lang.Object.getClass()'' on a null object reference

Mi código de MainActivity es como

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, View.OnClickListener { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); View header = navigationView.getHeaderView(0); userName = (TextView) header.findViewById(R.id.userName); userName.setText(user);//Username recieved through intent }}

Mientras lo ejecuta en emulador, muestra la actualización de tu servicio de reproducción, ¿es un problema?


El error ocurrió solo en el emulador al compilar con el nuevo servicio de reproducción 8.3 Mientras que la prueba en el hardware real no muestra ningún problema. Se debe a la falta de coincidencia en las versiones del servicio de reproducción en el emulador y la API. Espero que actualicen el API SDK de Google con el último servicio de reproducción y publiquen un aviso al respecto.


Mientras llama signIn() método signIn() , el método no puede encontrar startActivityForResult . donde obtuviste el error

Necesita @override startActivityForResult para LoginActivity . Agregue el siguiente código en su LoginActivity .

Código:

@Override public void startActivityForResult(Intent intent, int requestCode) { super.startActivityForResult(intent, requestCode); }