Приложение вылетает, когда я пытаюсь начать новое действие, если пользователь уже прошел аутентификацию в Firebase с помощью Google. - PullRequest
0 голосов
/ 06 июня 2018

Мое приложение работает нормально, когда я тестирую его на устройстве Android, но как только пользователь входит в систему, оно мгновенно вылетает и вылетает при запуске, если я не выполню чистую установку apk.Я аутентифицирую пользователей с помощью входа в Google с помощью Firebase.Аутентификация работает нормально, так как пользователи регистрируются с моей связанной учетной записью Firebase, но я намеревался направить пользователей на действие Auth из моего входа в систему, если они уже вошли в систему, но вместо этого у меня возникла вышеуказанная проблема.

`

package com.test.firebase;
import android.content.Intent;

import android.support.annotation.NonNull;
import android.os.Bundle;

import android.util.Log;
import android.view.View;
import android.widget.Toast;


import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GoogleAuthProvider;

import android.support.v7.app.AppCompatActivity;






public class LoginActivity extends AppCompatActivity {
SignInButton button;
FirebaseAuth mAuth;
private final static int RC_SIGN_IN = 2;

GoogleApiClient mGoogleApiClient;
FirebaseAuth.AuthStateListener mAuthListener;

@Override
protected void onStart() {
    super.onStart();

    mAuth.addAuthStateListener(mAuthListener);
}




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    button = (SignInButton) findViewById(R.id.googleBtn);
    mAuth = FirebaseAuth.getInstance();

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            signIn();
        }
    });

    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            if (firebaseAuth.getCurrentUser() != null) {
                startActivity(new Intent(LoginActivity.this, Auth.class));
            }
        }
    };
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build();
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this, new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
                    Toast.makeText(LoginActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show();
                }
            })
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();
}



private void signIn(){
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(signInIntent, RC_SIGN_IN);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()){
            GoogleSignInAccount account = result.getSignInAccount();
            firebaseAuthWithGoogle(account);
            } else {
            Toast.makeText(LoginActivity.this, "Auth went wrong", Toast.LENGTH_SHORT).show();
        }
        }
    }

private void firebaseAuthWithGoogle(GoogleSignInAccount account) {
    AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d("TAG", "signInWithCredential:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                    } else {

                        Log.w("TAG", "signInWithCredential:failure", task.getException());
                        Toast.makeText(LoginActivity.this, "Authentication failed.",
                            Toast.LENGTH_SHORT).show();
                    }


                }
            });
}

}

` Буду признателен за любую помощь, которую я могу получить в этом вопросе.

1 Ответ

0 голосов
/ 06 июня 2018

Просто используйте этот метод непосредственно в Onstart, он проверит, существуют ли пользователи, или нет, если вы это делаете, вы можете просто начать другие действия.Просто проверьте, не вошли ли пользователи, и каким-то образом вы нашли себя в другой деятельности, просто добавьте оператор else, чтобы перенаправить вас к первой активности!

Вы должны были вставить полученную ошибку, я могу как-то помочьВы больше с этим в руках.

 firebase.auth().onAuthStateChanged(function(user) {
      if (user) {
        // User is signed in.
      } else {
        // No user is signed in.
      }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...