【问题标题】:Android auth firebase error: Local module descriptor class for com.google.firebase.auth not foundAndroid auth firebase 错误:找不到 com.google.firebase.auth 的本地模块描述符类
【发布时间】:2017-09-11 07:58:35
【问题描述】:
  • 我正在尝试通过 Firebase 构建具有登录/注册功能的应用程序。我正在和一个合作伙伴一起工作(他在 Linux 上,我在 Mac 上),他能够让身份验证工作,但由于某种原因我没有。我们在 SDK 管理器中检查了所有相同的代码、SDK 工具,运行相同版本的所有内容。
  • 这是 gradle 文件:

    
    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' 
    
  • 还有代码:



    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;
    }

}

 
  • 最后是错误:

W/DynamiteModule:未找到 com.google.firebase.auth 的本地模块描述符类。
W/GooglePlayServicesUtil:缺少 Google Play 商店。
I/art: 后台部分并发标记扫描 GC freed 5866(313KB) AllocSpace objects, 1(14KB) LOS objects, 39% free, 2MB/4MB, paused 5.176ms total 27.761ms
D/帐户:createUserWithEmail:onComplete:false 
  • 几乎所有内容都来自 Firebase 网站的教科书。请帮忙,我们已经为此困扰了好几个小时,其他类似的问题都没有帮助。

【问题讨论】:

  • 在模拟器上,有时 Google Play 服务没有更新
  • 在 Emmulator 中更新 google play 服务

标签: android firebase firebase-authentication


【解决方案1】:

同样的事情发生在我身上,因为我使用的是旧的身份验证版本,如您所见 旧的被提及并注释掉,新的位于依赖项的底部。

因此,请始终尝试遵循提到的依赖项here

【讨论】:

    【解决方案2】:

    就我而言,我正在调试应用程序,但我的 firebase 项目配置中缺少 SHA1 密钥。如果您正在调试,请确保您已准备好 SHA1 密钥。

    【讨论】:

      【解决方案3】:

      createUserWithEmailAndPassword()onComplete() 监听器中添加一个log,看看究竟是什么原因导致失败。

         if (!task.isSuccessful()) {
          Log.e(TAG, "onComplete: Failed=" + task.getException().getMessage()); 
          }
      

      这可能是由于您在创建帐户时输入了passwordemail。 检查:

      • 如果您输入的电子邮件格式正确且确实存在。
      • 如果密码强度足以被接受(通常不少于 6 个字母)。
      • 如果已有帐户使用相同的电子邮件。

      【讨论】:

        【解决方案4】:

        您能检查一下您的 Google Play 服务版本吗?

        先决条件:

        • 运行 Google Play 服务 9.0.0 或更高版本的 Android 设备
        • Android SDK 管理器中的 Google Play 服务 SDK
        • Android Studio 1.5 或更高版本
        • Android Studio 项目及其包名。

        此问题的一个原因可能是,您在 Firebase 中的登录方法 > 身份验证仪表板可能被禁用。

        编辑

        10.2.1 版本无法从任何(虚拟)下载 您测试过的设备,需要更新。

        独立 SDK 管理器底部的 Extras 部分中显示的 Google Play 服务版本对模拟器使用的版本没有影响。模拟器运行在配置为包含某些特定版本的 Play 服务的系统映像上,这些版本并不总是相同。

        您应该确认您已经下载了具有版本兼容性的最新模拟器图像,例如版本 10.2.1(latest)。

        【讨论】:

        • 我在 Nexus 7 API 22(Android 5.1.1,API 22)的模拟器上运行它。我的 Google Play 服务 SDK 安装的版本是 39,Android Studio 是 2.3.1,Sign In 方法被授权用于电子邮件,这是我一直在尝试的。
        • @Aryan 您是否有指向文档的链接,该文档指出必须拥有 9 版及更高版本的 google play 服务才能使其正常工作?我正在使用版本为“8.3.01 (2385995-434)”的设备,显然它不起作用:stackoverflow.com/questions/53370161/…
        • @user1872384 我现在没有任何参考链接,因为帖子有点旧,为什么要坚持旧版本??
        • 支持更多设备使用旧版 google play 服务。 (例如,奶奶不知道如何更新 google play 服务,以便能够使用我们的应用程序)
        • 顺便说一句,什么是控制运行您的应用所需的最低谷歌播放服务版本?
        【解决方案5】:

        选项1:转到Firebase Console

        选项 2:检查您正在测试的设备是否运行 Google Play Services 9.0.0 或更高版本。

        【讨论】:

        • 选项 1 很有用。
        • 这只是匿名登录的问题吗?或者其他登录方式也会导致同样的问题?
        猜你喜欢
        • 1970-01-01
        • 2016-11-30
        • 2020-12-11
        • 1970-01-01
        • 1970-01-01
        • 2017-03-26
        • 2022-07-21
        • 2021-01-06
        • 2017-04-18
        相关资源
        最近更新 更多