ここにスクリーンショットがあります 私はプロジェクトでその時点でfirebase認証を使用してGoogleからサインインしようとしていますがエラーがあります
com.google.firebase.auth.FirebaseAuthException:この操作は許可されていません。コンソールでこのサービスを有効にする必要があります。また、ERROR_OPERATION_NOT_ALLOWEDと表示されます
この操作は許可されていません。コンソールでこのサービスを有効にする必要があります。
エラーが言ったように、 Firebase console で認証を有効にする必要があります。
これを行うには、プロジェクトにアクセスして->認証方法、サインイン方法->目的の認証タイプを有効にします。
次の手順は私のために働いた
それは私のために働いたし、私もそれがあなたのために働くことを願っています。
追伸:この回答を追加するのは、jsonファイルの置き換えについて他の回答のどれにも言及していないためです。
FirebaseからのFirebase認証を許可する必要があります。EmailまたはFacebookなどを使用してください。
Firebaseコンソール->認証->サインイン方法、およびアプリが使用するサインイン方法を有効にします
AuthActivityクラスコードの完全な例は次のとおりです。
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);
}
}
}
上記のすべての回答を試してください。まだ機能しませんが、google-services.jsonファイルを新しいgoogle-services.jsonに置き換えてください。それは今私のために働いていた。
Nativescriptアプリでこの同じ問題が発生しましたが、私がnode_modulesとplatformフォルダーを削除してプロジェクトを再構築になるまで何も修正しませんでした。これで問題が解決しました。言い換えれば(これはTNSまたはモバイル以外の他のフレームワークにも当てはまるかもしれません)、生成したファイルを削除して再構築を再生成します。
これが誰かを助けることを願っています!これを試す前に長い時間がかかったことを知っています:p
私も同じ問題を抱えています。ルールやgradleの追加、有効化などで遊ぶことを含め、何も助けにはなりませんでした。唯一の解決策は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);
...
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();
}
}
});
...
そしてメソッドで:
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();
}
});
}
String.xmlで行った別のエラー、app_nameがレターで間違っていました。
私はそれが古い質問であることを知っていますが、最近、同様の問題に直面し、それを解決する方法を見つけました。私の場合、私の問題はSignInIntentをstartActivityForResult。
あなたがしたように、Firebase ConsoleでGoogle認証方法を正しく構成し、Firebaseのドキュメントページにあるサンプルコードをコピーしました( https://firebaseopensource.com/projects/firebase/firebaseui-Android/auth/README .md )。
ただし、接続しようとするたびに同じエラーが表示されました。その後、startActivityForResultを呼び出すときにGoogleプロバイダーをアクティブ化していないことに気付きました。最初は、以下のコードを試してみましたが成功しませんでした。
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.build(),
RC_SIGN_IN);
次に、以下のコードに変更して、動作するようにしました!
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(Arrays.asList(
AuthUI.IdpConfig.GoogleBuilder().build()))
.build(), RC_SIGN_IN)
最初のコードスニペットはGoogleプロバイダーを使用していないため、ユーザー/パスワード認証方法に依存していることに注意してください。 Firebase Consoleでこのメソッドを有効にすると、このスニペットは完全に機能します。