Peut-être que ceux qui cherchent encore une solution:
En activité (yourLoginActivity.classe)
* Créer un int constant représente la requestCode pour ActivityForResult
// You can change to any Value just be unique
private static final int RC_SIGN_IN = 1001;
-> déclarer GoogleApiClient, FirebaseAuth, AuthStateListener et CallbackManager
private static final String TAG = "LoginActivity";
private static final int RC_SIGN_IN = 1001;
private GoogleApiClient mGoogleApiClient;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private CallbackManager mCallbackManager;
-> Initialiser les variables déclarées ci-dessus:
mCallbackManager = CallbackManager.Factory.create(); mAuth = FirebaseAuth.getInstance(); mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
} else {
// User is signed out
Log.d(TAG, "onAuthStateChanged:signed_out");
}
} };
-> Faire référence à Si ngInButton et LoginButton:
LoginButton facebookLoginButton = findViewById(R.id.login_facebook_button);
SignInButton mGoogleSignInButton = findViewById(R.id.sign_in_button);
-> Manipulez le SingInButton et LoginButton:
facebookLoginButton.setReadPermissions("email", "public_profile", "user_birthday");
facebookLoginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
firebaseAuthWithFacebook(loginResult.getAccessToken());
}
@Override
public void onCancel() {
Toast.makeText(LoginActivity.this, "Succes", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(FacebookException error) {
Toast.makeText(LoginActivity.this, "Succes", Toast.LENGTH_SHORT).show();
}
});
mGoogleSignInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
signIn();
}
});
-> Gérer les GoogleSingInOptions et GoogleApiClient
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 /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
-> Manipulez le Facebook Connectez-vous
private void authWithFacebook(AccessToken token) {
Log.d(TAG, "handleFacebookAccessToken:" + token);
final AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
if (mAuth.getCurrentUser() != null) {
mAuth.getCurrentUser().linkWithCredential(credential)
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
Toast.makeText(LoginActivity.this, "Logged IN", Toast.LENGTH_LONG).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
e.printStackTrace();
Log.e(TAG, "onFailure: " + e.getMessage());
mAuth.signInWithCredential(credential).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
Toast.makeText(LoginActivity.this, "Logged IN", Toast.LENGTH_LONG).show();
}
});
}
});
} else {
mAuth.signInWithCredential(credential);
}
}
-> Manipulez le login Google:
pprivate void authWithGoogle(final GoogleSignInAccount acct) {
Log.d(TAG, "firebaseAuthWithGooogle:" + acct.getId());
final AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
if (mAuth.getCurrentUser() != null) {
mAuth.getCurrentUser().linkWithCredential(credential).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
Toast.makeText(LoginActivity.this, "Logged IN", Toast.LENGTH_LONG).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
e.printStackTrace();
Log.e(TAG, "onFailure: " + e.getMessage());
mAuth.signInWithCredential(credential).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
Toast.makeText(LoginActivity.this, "Logged IN", Toast.LENGTH_LONG).show();
}
});
}
});
}else{
mAuth.signInWithCredential(credential);
}
}
-> surchargent onConnectionFailed():
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
// An unresolvable error has occurred and Google APIs (including Sign-In) will not
// be available.
Log.d(TAG, "onConnectionFailed:" + connectionResult);
Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_SHORT).show();
}
-> Chant et appelant le onActivityForResult()
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
-> Mettre en œuvre GoogleApiClient.OnConnectionFailedListener
LoginActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener{
....
}
Assurez-vous d'avoir ACTIVÉ FACEBOOK SDK Connectez-vous DEPUIS LA CONSOLE DE FIREBASE ET INSTALLEZ CORRECTEMENT!
Le code que vous avez publié n'est pas le code lançant l'exception. L'exception se produit lorsque vous appelez 'mAuth.addAuthStateListener (mAuthListener)' et 'mAuth' est null. Confirmez que vous avez exécuté 'mAuth = FirebaseAuth.getInstance()', avant d'essayer d'ajouter l'écouteur. –
Comme dans les tutoriels de la base de données Firebase, la ligne à laquelle vous faites référence: 'mAuth = FirebaseAuth.getInstance()' est dans mon fragment de code. Il est appelé dans onCreate. Le 'mAuth.addAuthStateListener (mAuthListener);' est appelé dans le onStart. – Tim