web-dev-qa-db-fra.com

Erreur d'authentification Firebase dans Android

Voici une capture d'écran J'essaie de me connecter à partir de Google en utilisant l'authentification Firebase à ce moment-là dans mon projet. Il y a une erreur

com.google.firebase.auth.FirebaseAuthException: cette opération n’est pas permis. Vous devez activer ce service dans la console. et aussi ça dit ERROR_OPERATION_NOT_ALLOWED

Cette opération n'est pas autorisée. Vous devez activer ce service dans la console.

6
manjiri

Comme vous l'avez dit, vous devez activer l'authentification dans votre console Firebase .

Cela peut être fait en accédant à votre projet -> menu d’authentification, MÉTHODE DE CONNEXION -> puis activez le type d’authentification souhaité.

9
Alex Mamo

Les étapes suivantes ont fonctionné pour moi

  1. Accédez à la console Firebase et activez l’authentification de la base de feu pour la méthode de connexion souhaitée (principalement son "email et son mot de passe" et "n'importe quel nom").
  2. Téléchargez votre fichier google-services.json à partir de la console, remplacez-le par celui existant
  3. Reconstruisez votre projet

Cela a fonctionné pour moi et j'espère que cela fonctionnera pour vous aussi.

P.S: J'ajoute cette réponse car aucune des autres réponses ne mentionnait le remplacement du fichier json, qui, à mon avis, a effectivement fait le travail pour moi.

4
AwaisMajeed

Vous devez autoriser l'authentification de Firebase à partir de Firebase, avec email, Facebook ou autre.

Console Firebase -> Authentification -> Méthode de connexion et activez une méthode de connexion que votre application utilisera

 here

enter image description here

Exemple complet du code de classe AuthActivity ici:

package com.<you_domain>.<your_application_name>;

import Android.app.ProgressDialog;
import Android.content.Context;
import Android.content.DialogInterface;
import Android.content.Intent;
import Android.graphics.drawable.ColorDrawable;
import Android.net.Uri;
import Android.os.Build;
import Android.os.Bundle;
import Android.support.annotation.NonNull;
import Android.support.multidex.MultiDex;
import Android.support.v4.content.ContextCompat;
import Android.support.v7.app.AlertDialog;
import Android.support.v7.app.AppCompatActivity;
import Android.util.Log;
import Android.view.View;
import Android.view.Window;
import Android.view.WindowManager;
import Android.widget.ProgressBar;
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.GoogleApiAvailability;
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;

public class AuthActivity extends AppCompatActivity
    implements GoogleApiClient.OnConnectionFailedListener,
    View.OnClickListener{

private Context authActivity;

private static int RC_SIGN_IN = 1;
private static String TAG = "AUTH_ACTIVITY";
private GoogleApiClient mGoogleApiClient;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;

private AlertDialog alertDialog;

private Android.app.AlertDialog splashDialog;

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    authActivity = this;

    setContentView(R.layout.auth_activity);

    Window window = this.getWindow();

    if (Android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.setStatusBarColor(ContextCompat.getColor(this, R.color.colorPrimaryDark));
    }

    GoogleApiAvailability api = GoogleApiAvailability.getInstance();
    int gpsAvail = api.isGooglePlayServicesAvailable(authActivity);

    if(Connection.isInternetConnected(authActivity)){

        if(gpsAvail == ConnectionResult.SUCCESS){

        mAuth = FirebaseAuth.getInstance();
        mAuthListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

                FirebaseUser user = firebaseAuth.getCurrentUser();

                if(user != null){
                    Log.d("AUTH", "user logged in: " + user.getEmail());
                }else{
                    Log.d("AUTH", "user logged out.");
                }
            }
        };

        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.
                DEFAULT_SIGN_IN).requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

        mGoogleApiClient = new GoogleApiClient.Builder(authActivity)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build();

        findViewById(R.id.sign_in_btn).setOnClickListener(this);

    }else if(gpsAvail == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED){

        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(authActivity);

        alertDialogBuilder.setCancelable(false);
        alertDialogBuilder.setTitle("Google Play Services out of date");
        alertDialogBuilder.setMessage("Your Google Play Services version is out of date. " +
                "Please update it and continue.");
        alertDialogBuilder.setIcon(Android.R.drawable.ic_dialog_alert);

        alertDialogBuilder.setPositiveButton(" UPDATE ", new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {

                String url = "https://play.google.com/store/apps/" +
                        "details?id=com.google.Android.gms";
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse(url));
                startActivity(i);

            }
        });

        alertDialog = alertDialogBuilder.create();

        alertDialog.setOnShowListener( new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface arg0) {
                alertDialog.getButton(AlertDialog.BUTTON_POSITIVE)
                        .setTextColor(getColor(authActivity, R.color.colorPrimary));
            }
        });

        alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialogInterface) {
                finish();
            }
        });

        alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialogInterface) {
                finish();
            }
        });

        alertDialog.show();

    }else{

        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(authActivity);

        alertDialogBuilder.setCancelable(false);
        alertDialogBuilder.setTitle("Google Play Services needed");
        alertDialogBuilder.setMessage("You need Google Play Services in order to proceed. " +
                "Please install the latest version.");
        alertDialogBuilder.setIcon(Android.R.drawable.ic_dialog_alert);

        alertDialogBuilder.setPositiveButton(" INSTALL ", new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {

                String url = "https://play.google.com/store/apps/" +
                        "details?id=com.google.Android.gms";
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse(url));
                startActivity(i);

            }
        });

        alertDialog = alertDialogBuilder.create();

        alertDialog.setOnShowListener( new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface arg0) {
                alertDialog.getButton(AlertDialog.BUTTON_POSITIVE)
                        .setTextColor(getColor(authActivity, R.color.colorPrimary));
            }
        });

        alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialogInterface) {
                finish();
            }
        });

        alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialogInterface) {
                finish();
            }
        });

        alertDialog.show();

    }

}else {

    try {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(authActivity);

        alertDialogBuilder.setCancelable(false);
        alertDialogBuilder.setTitle("No internet connection");
        alertDialogBuilder.setMessage("Internet not available. " +
                "Please check your internet connectivity and try again.");
        alertDialogBuilder.setIcon(Android.R.drawable.ic_dialog_alert);

        alertDialogBuilder.setPositiveButton(" OK ", new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {
                dialog.cancel();
            }
        });

        alertDialog = alertDialogBuilder.create();

        alertDialog.setOnShowListener( new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface arg0) {
                alertDialog.getButton(AlertDialog.BUTTON_POSITIVE)
                        .setTextColor(getColor(authActivity, R.color.colorPrimary));
            }
        });

        alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialogInterface) {
                finish();
            }
        });

        alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialogInterface) {
                finish();
            }
        });

        alertDialog.show();

    }
    catch(Exception e)
    {
        Log.d("Connection", "Show Dialog: " + e.getMessage());
    }

}

}

@Override
protected void onStart() {
    super.onStart();
    if(mAuthListener != null) {
        mAuth.addAuthStateListener(mAuthListener);
    }
}

@Override
protected void onStop() {
    super.onStop();
    if(mAuthListener != null){
        mAuth.removeAuthStateListener(mAuthListener);
    }
}

@Override
protected 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{
            Log.d(TAG, "Google Login Failed");

            Toast.makeText(authActivity, "Sign in failed.", Toast.LENGTH_LONG).show();

        }

    }

}

private void firebaseAuthWithGoogle(GoogleSignInAccount acct){

    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    Log.d("AUTH", "signInWithCredential:oncomplete: " + task.isSuccessful());

                    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

                    if(user != null){

                        Intent intent = new Intent(AuthActivity.this, MainActivity.class);
                        startActivity(intent);
                        //splashDialog.dismiss();
                        splashDialog.cancel();

                        Toast.makeText(authActivity, "Successfully signed in",
                                Toast.LENGTH_LONG).show();

                        finish();

                    }

                }
            });

}

private void signIn(){
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(signInIntent, RC_SIGN_IN);
}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    Log.d(TAG, "Connection failed.");

}

@Override
public void onClick(View view) {

    switch(view.getId()){

        case R.id.sign_in_btn:

            splashDialog = ProgressDialog.show(this, null, null);
            ProgressBar spinner = new Android.widget.ProgressBar(this, null,
                    Android.R.attr.progressBarStyle);
            spinner.getIndeterminateDrawable().setColorFilter(getColor(this,
                    R.color.colorPrimary), Android.graphics.PorterDuff.Mode.SRC_IN);
            splashDialog.getWindow().setBackgroundDrawable(
                    new ColorDrawable(Android.graphics.Color.TRANSPARENT));
            splashDialog.setContentView(spinner);
            splashDialog.setCancelable(false);

            signIn();

            break;

    }

}

@Override
public void onDestroy() {
    super.onDestroy();

    if (splashDialog != null) {
        splashDialog.cancel();
        splashDialog = null;
    }

}

@SuppressWarnings("deprecation")
public static int getColor(Context context, int id) {
    final int version = Build.VERSION.SDK_INT;
    if (version >= 23) {
        return ContextCompat.getColor(context, id);
    } else {
        return context.getResources().getColor(id);
    }
}

}
4
Razvan

essayez toutes les réponses ci-dessus bien que cela ne fonctionne toujours pas remplacez le fichier google-services.json par le nouveau google-services.json. cela avait fonctionné pour moi le faire maintenant.

0
saigopi

J'avais ce même problème en train de travailler sur une application Nativescript et rien ne l'a corrigé jusqu'à ce que je ai supprimé mes dossiers node_modules et plates-formes et reconstruit le projet . Cela a résolu mon problème. En d’autres termes (et cela peut s’appliquer à d’autres frameworks que TNS ou même mobile), supprimez les fichiers générés et reconstruisez pour les régénérer.

J'espère que cela aide quelqu'un! Je sais que cela m'a pris longtemps avant d'essayer ceci: p

0
Camilo

J'ai aussi rencontré le même problème. Rien n’a aidé à jouer avec les règles et les ajouts, les habilitations, etc. Le seul qui était la solution est dans onCreate ():

...                                                           
    FirebaseOptions options = new FirebaseOptions.Builder()
            .setApiKey("AIzaSyA61lkklrz_K_vXsrUUiug9LwImK3sg26bE")//https://console.developers.google.com/apis/credentials?project=korisanjish-92e92
            .setApplicationId("uz.man.speach.gapi")
            .setDatabaseUrl("https://korisanjish-92e92.firebaseio.com/")
            .build();
     fbApp = FirebaseApp.initializeApp(getApplicationContext(), options, "SpeachGAPIMaximTest");
    fbDB = FirebaseDatabase.getInstance(fbApp);
    fbDB.setPersistenceEnabled(true);                                   
     ...

Et dans onStart ():

...                                                                        
    mAuth = FirebaseAuth.getInstance(fbApp);//
     List<FirebaseApp> lLcl= FirebaseApp.getApps(this);
    for(FirebaseApp fb : lLcl){
        l.a(fb.getName());
    }

    showWheel();
    mAuth.signInWithEmailAndPassword("[email protected]", "U$pe$hn11Proekt")
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        l.a( "signInWithEmail:success");
                        FirebaseUser currentUser = mAuth.getCurrentUser();

                        if(currentUser==null)
                            l.a(434343);
                        else
                            l.a( currentUser.getEmail());
                        stopWheel();

                    } else {
                        // If sign in fails, display a message to the user.
                        l.a( task.getException());
                        l.a(task.getException().getMessage());
                        Toast.makeText(MainActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        finish();
                    }
                }
            });                                                           
         ...

Et dans une méthode:

private void sendToFireBase() {
    MainActivity activityLcl = (MainActivity) getActivity();
    DatabaseReference mDatabase = activityLcl.getFbDB().getReference();
    String sLcl = (String) hashMap.get("Item ID");
    User userLcl = new User(altitudeDouble, location.getLongitude(), location.getLatitude(), urlString,
            textString, languageString, preceededIdString, sLcl);
    //Double altitude, Double longitude, Double latitude, String url, String text, String locale, String preceededId

    FirebaseAuth mAuthLcl = activityLcl.getAuth();
    activityLcl.showWheel();
    mDatabase.child("users").child(mAuthLcl.getUid()).setValue(userLcl, new DatabaseReference.CompletionListener() {
        public void onComplete(DatabaseError error, DatabaseReference ref) {
            MainActivity activityLcl = (MainActivity) getActivity();
            String s2Lcl = "";
            if (null == error) {
                s2Lcl = "Uploaded";
            } else
                s2Lcl = error.getDetails();
            activityLcl.showMessage("Value was set. Status = " + s2Lcl);

            l.a("Value was set. Error = " + s2Lcl);
            activityLcl.stopWheel();
        }
    });
}

Une autre erreur que j'ai commise dans strings.xml est que l'app_name était incorrect dans une lettre.

0
CodeToLife

Je sais que c'est une vieille question, mais j'ai récemment fait face à un problème similaire et j'ai trouvé comment le résoudre. Dans mon cas, mon problème reposait sur la façon dont j'avais créé le SignInIntent transmis à startActivityForResult.

Comme vous l'avez fait, j'ai également correctement configuré la méthode d'authentification Google dans Firebase Console et copié l'exemple de code fourni dans la page de documentation de Firebase ( https://firebaseopensource.com/projects/firebase/firebaseui-Android/auth/README.md ).

Cependant, j'ai eu la même erreur que vous avez chaque fois que j'ai essayé de vous connecter. Ensuite, j'ai réalisé que je n'activais pas le fournisseur Google en appelant startActivityForResult. Au début, j'ai essayé le code ci-dessous sans succès.

startActivityForResult(
    AuthUI.getInstance()
          .createSignInIntentBuilder()
          .build(),
           RC_SIGN_IN);

Ensuite, je l'ai changé pour le code ci-dessous et je l'ai fait fonctionner!

startActivityForResult(
    AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(Arrays.asList(                        
                AuthUI.IdpConfig.GoogleBuilder().build()))
        .build(), RC_SIGN_IN)

Notez que le premier extrait de code n'utilise pas le fournisseur Google. Il repose donc sur la méthode d'authentification utilisateur/mot de passe. Si vous activez cette méthode dans la console Firebase, cet extrait fonctionnera parfaitement.

0
Marlon