首页 文章

为什么Android Firebase会跳过身份验证活动

提问于
浏览
1

我正在我的新Android应用程序中实施Firebase电子邮件/密码身份验证 .

该应用程序在大多数情况下工作正常,但当用户单击登录或注册的两个按钮之一时,应用程序会跳过所谓的活动,登录或注册,然后直接进入mainActivity .

这就是我写下打开下一个活动的意图: -

mRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ChooseLogin.this, RegistrationActivity.class);
                startActivity(intent);
                finish();
                return;}});

我在调试中发现了两个可能相关的错误: -

W / zygote64:由于无法识别的类加载器W / DynamiteModule而跳过重复的类检查:找不到com.google.firebase.auth的本地模块描述符类 .

以及:-

W / DynamiteModule:找不到com.google.android.gms.crash的本地模块描述符类 .

根据我的类似问题的答案:

  • 与firebase助手核对,它说我已经连接了 .

Firebase Assistant

  • 检查了我在firebase控制台中启用了电子邮件/密码登录

  • 检查了我的设备和模拟器,两者都采取了相同的行动

  • 检查我是否使用了最新的'com.google.firebase:firebase-auth:11.6.0'

  • 检查了google play服务是否正常'classpath'com.google.gms:google-services:3.1.0'

  • 甚至添加到了Internet权限的清单请求中

  • 实施了firebases crashylytics并且它没有 grab 这个

  • 重新添加了google.services.json文件,然后构建/重建项目

EDIT (根据要求提供registrationActivity和logcat):

registrationActivity的onCreate:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        mAuth = FirebaseAuth.getInstance();

        fireBaseStateListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                Intent intent = new Intent(RegistrationActivity.this, MainActivity.class);
                startActivity(intent);
                    finish();
                    return;}};

   @Override
    protected void onStart() {
        super.onStart();
        mAuth.addAuthStateListener(fireBaseStateListener);
    }

Logcat:

11-23 11:58:59.652 12880-12880/com.sanruza.alpak.tinderlike I/zygote64: Late-enabling -Xcheck:jni
11-23 11:59:00.016 12880-12880/com.sanruza.alpak.tinderlike W/zygote64: Skipping duplicate class check due to unrecognized classloader
11-23 11:59:00.020 12880-12880/com.sanruza.alpak.tinderlike W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
11-23 11:59:00.027 12880-12880/com.sanruza.alpak.tinderlike W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
11-23 11:59:00.048 12880-12880/com.sanruza.alpak.tinderlike I/BiChannelGoogleApi: [FirebaseAuth: ] No Fallback module; NOT setting up for lazy initialization
11-23 11:59:00.091 12880-12914/com.sanruza.alpak.tinderlike W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
11-23 11:59:00.104 12880-12914/com.sanruza.alpak.tinderlike I/FirebaseAuth: [FirebaseAuth:] Loading module via FirebaseOptions.
11-23 11:59:00.104 12880-12914/com.sanruza.alpak.tinderlike I/FirebaseAuth: [FirebaseAuth:] Preparing to create service connection to gms implementation
11-23 11:59:00.118 12880-12917/com.sanruza.alpak.tinderlike I/DynamiteModule: Considering local module com.google.android.gms.flags:2 and remote module com.google.android.gms.flags:0
11-23 11:59:00.118 12880-12917/com.sanruza.alpak.tinderlike I/DynamiteModule: Selected local version of com.google.android.gms.flags
11-23 11:59:00.148 12880-12917/com.sanruza.alpak.tinderlike W/DynamiteModule: Local module descriptor class for com.google.android.gms.crash not found.
11-23 11:59:00.156 12880-12917/com.sanruza.alpak.tinderlike I/DynamiteModule: Considering local module com.google.android.gms.crash:0 and remote module com.google.android.gms.crash:10
11-23 11:59:00.157 12880-12917/com.sanruza.alpak.tinderlike I/DynamiteModule: Selected remote version of com.google.android.gms.crash, version >= 10
11-23 11:59:00.162 12880-12880/com.sanruza.alpak.tinderlike V/FA: Cancelling job. JobID: -385218149
11-23 11:59:00.171 12880-12880/com.sanruza.alpak.tinderlike V/FA: Registered activity lifecycle callback
11-23 11:59:00.172 12880-12880/com.sanruza.alpak.tinderlike I/FirebaseInitProvider: FirebaseApp initialization successful
11-23 11:59:00.205 12880-12921/com.sanruza.alpak.tinderlike V/FA: Collection enabled

2 回答

  • 1

    是的,因为这个,它直接进入主动:

    mAuth = FirebaseAuth.getInstance();
    
        fireBaseStateListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                Intent intent = new Intent(RegistrationActivity.this, MainActivity.class);
                startActivity(intent);
                    finish();
                    return;}};
    
     @Override
       protected void onStart() {
          super.onStart();
          mAuth.addAuthStateListener(fireBaseStateListener);
       }
    

    onStart 这样做了: mAuth.addAuthStateListener(fireBaseStateListener);

    所以它进入了Listener,因为你的代码中有这个:

    Intent intent = new Intent(RegistrationActivity.this, MainActivity.class);
    startActivty(intent);
    

    它直接转到MainActivity.class

    做这个:

    final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
          if(user!=null){ //if user is signed in
            Intent intent = new Intent(RegistrationActivity.this, MainActivity.class);
            startActivity(intent);
                finish();
            }
             else{
                   Log.i("sign in", not signed in);
                }};
    
  • 1

    你实现了 sharedpreference 吗?也许是因为 sharedpreference 如果你为 user session 实现了这个 . 如果你没有实现,那么尝试从 RegistrationActivity 复制你的代码,然后创建新的 Activity 并粘贴到那里 .

相关问题