问题
- I'm trying to build an app with login/register capabilities through Firebase. I'm working on it with a partner (he's on Linux, I'm on Mac), and he's able to get the authentication working but for some reason I am not. We have all the same code, SDK tools checked in the SDK manager, running the same version of everything.
Here's the gradle file:
compile 'com.android.support:appcompat-v7:25.3.0' compile 'com.android.support.constraint:constraint-layout:1.0.2' compile 'com.google.firebase:firebase-auth:10.2.1' compile 'com.android.support:design:25.3.0' testCompile 'junit:junit:4.12'
And the code:
public class RegisterActivity extends AppCompatActivity {
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private EditText mUsernameField;
private EditText mPasswordField;
private EditText mConfirmPasswordField;
private Button mRegisterButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mUsernameField = (EditText) findViewById(R.id.enterUsername);
mPasswordField = (EditText) findViewById(R.id.enterPassword);
mConfirmPasswordField = (EditText) findViewById(R.id.confirmPassword);
mRegisterButton = (Button) findViewById(R.id.confirmRegistration);
mRegisterButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createAccount(mUsernameField.getText().toString(), mPasswordField.getText().toString());
}
});
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("account", "onAuthStateChanged:signed_in:" + user.getUid());
} else {
// User is signed out
Log.d("account", "onAuthStateChanged:signed_out");
}
// ...
}
};
}
@Override
public void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
mAuth.removeAuthStateListener(mAuthListener);
}
}
private void createAccount(String email, String password) {
Log.d("account", "createAccount:" + email);
if (!validateForm()) {
return;
}
// [START create_user_with_email]
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
Log.d("account", "createUserWithEmail:onComplete:" + task.isSuccessful());
// If sign in fails, display a message to the user. If sign in succeeds
// the auth state listener will be notified and logic to handle the
// signed in user can be handled in the listener.
if (!task.isSuccessful()) {
Toast.makeText(RegisterActivity.this, R.string.register_failed,
Toast.LENGTH_SHORT).show();
}
else {
Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
RegisterActivity.this.startActivity(intent);
finish();
}
}
});
// [END create_user_with_email]
}
private boolean validateForm() {
boolean valid = true;
String email = mUsernameField.getText().toString();
if (TextUtils.isEmpty(email)) {
mUsernameField.setError("Required.");
valid = false;
} else {
mUsernameField.setError(null);
}
String password = mPasswordField.getText().toString();
if (TextUtils.isEmpty(password)) {
mPasswordField.setError("Required.");
valid = false;
} else {
mPasswordField.setError(null);
}
String confirmPassword = mConfirmPasswordField.getText().toString();
if (TextUtils.isEmpty(confirmPassword)) {
mConfirmPasswordField.setError("Required.");
valid = false;
} else {
mConfirmPasswordField.setError(null);
}
if(!confirmPassword.equals(password)) {
mConfirmPasswordField.setError("Passwords must be the same.");
valid = false;
}
return valid;
}
}
- And finally the error:
W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found. W/GooglePlayServicesUtil: Google Play Store is missing. I/art: Background partial concurrent mark sweep GC freed 5866(313KB) AllocSpace objects, 1(14KB) LOS objects, 39% free, 2MB/4MB, paused 5.176ms total 27.761ms D/account: createUserWithEmail:onComplete:false
- Pretty much everything was taken textbook from the Firebase website. Please help, we've been stuck on this for hours, and none of the other similar questions have helped.
回答1:
Option 1: Go to Firebase Console < Authentication < SIGN-IN METHOD, and see if you are using it in the Anonymous state. If you are, disable that and enable Email/Password or whichever login method you are using.
Option 2: Check if the device you are testing with is running Google Play Services 9.0.0 or later.
回答2:
Add a log
in onComplete()
listener of createUserWithEmailAndPassword()
to see what exactly is the reason behind the failure.
if (!task.isSuccessful()) {
Log.e(TAG, "onComplete: Failed=" + task.getException().getMessage());
}
This can be due to the password
or email
you entered to create an account.
Check:
- if the email you entered is in proper format and does exist.
- if password is strong enough to be accepted (usually not less than 6 letters).
- if there is already an account with the same email.
回答3:
Can you check your Google Play Services version?
Prerequisites :
- An Android device running Google Play services 9.0.0 or later
- The Google Play services SDK from the Android SDK Manager
- Android Studio 1.5 or higher
- An Android Studio project and its package name.
One of the reason for this problem could be, your Sign In Method inside Firebase > Auth Dashboard might be disabled.
EDIT
The 10.2.1 version wasn't available for downloading from any (virtual) device that you tested, required update.
The version of Google Play Services shown in the Extras section at the bottom of the Standalone SDK Manager has no effect on the version used by an emulator. The emulators run on system images configured to contain some particular version of Play Services, which is not always the same.
You should confirm that you have downloaded the latest emulator images having version compatibility like version 10.2.1(latest).
回答4:
In my case, I was debugging the application and was missing the SHA1
Key in my firebase project configuration. If you are debugging make sure you have your SHA1
Key in place.
来源:https://stackoverflow.com/questions/43422021/android-auth-firebase-error-local-module-descriptor-class-for-com-google-fireba