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.
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é.
Les étapes suivantes ont fonctionné pour moi
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.
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
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);
}
}
}
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.
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
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.
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.