Facebook登录仅适用于API 24 - 未找到com.google.firebase.auth的本地模块描述符类.错误

Siq*_*ira 5 android facebook firebase firebase-authentication

我在我的应用程序中添加了使用firebase身份验证的facebook登录,但登录身份验证仅适用于Android API 24.

当我尝试使用较低级别的API时,屏幕会冻结,应用程序将停止工作.

它太高,大多数用户的API级别较低.

实际上,我打算发布较低API级别的应用程序.

我正在使用的代码如下.

public class ConfigurationActivity extends Activity {

    Button b_v_mm,b_som;
    LoginButton loginButton;
    CallbackManager callbackManager;

    // [START declare_auth]
    private FirebaseAuth mAuth;
    // [END declare_auth]


    private void handleFacebookAccessToken(AccessToken token) {
        Log.d("FireBase", "handleFacebookAccessToken:" + token);

        AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
        mAuth.signInWithCredential(credential)
                .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
                            Log.d("FireBase", "signInWithCredential:success");
                            FirebaseUser user = mAuth.getCurrentUser();
                            //updateUI(user);
                        } else {
                            // If sign in fails, display a message to the user.
                            Log.w("FireBase", "signInWithCredential:failure", task.getException());
                            //Toast.makeText(FacebookLoginActivity.this, "Authentication failed.",
                             //       Toast.LENGTH_SHORT).show();
                            //updateUI(null);
                        }

                        // ...
                    }
                });
    }

    // [START on_start_check_user]
    @Override
    public void onStart() {
        super.onStart();
        Log.d("FireBase", "onStart");
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        //updateUI(currentUser);
    }
    // [END on_start_check_user]

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d("LoginFace", "LoginFace - onActivityResult");
        super.onActivityResult(requestCode, resultCode, data);
        Log.d("LoginFace", "LoginFace - onActivityResult");
        callbackManager.onActivityResult(requestCode, resultCode, data);
        Log.d("LoginFace", "LoginFace - After callbackManager");
/*
        if (AccessToken.getCurrentAccessToken() != null) {
            Log.d("AjudaFace", "AjudaFace - logout");
            LoginManager.getInstance().logOut();
        }*/
    }

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

        //Botãp da barra de ferramentas que faz retornar para o Menu principal.
        b_v_mm = (Button) findViewById(com.cerveja.qof.pedro.qof_cerveja.R.id.b_v_mm);
        b_v_mm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ConfigurationActivity.this, MainMenu.class);
                startActivity(intent);
                finish();
            }
        });

        b_som = (Button) findViewById(com.cerveja.qof.pedro.qof_cerveja.R.id.b_som);
        //Altera opções de som.
        b_som.setOnClickListener(new View.OnClickListener() {
                                      @Override
                                      public void onClick(View v) {

                                          //Carrega opções de texto do botão, armazenadas no repositório de strings
                                          String s_som_on = getString(R.string.b_som_on);
                                          String s_som_off = getString(R.string.b_som_off);

                                          //Caso o som esteja desligado, o desliga.
                                          if(b_som.getText().equals(s_som_on)) {
                                              b_som.setText(s_som_off);
                                          }
                                          else //Caso o som esteja desligado, o liga.
                                              if (b_som.getText().equals(s_som_off)){
                                                  b_som.setText(s_som_on);
                                              }
                                      }
                                  }
        );

        callbackManager = CallbackManager.Factory.create();


// ...
// Initialize Firebase Auth
        mAuth = FirebaseAuth.getInstance();

        loginButton = (LoginButton) findViewById(R.id.login_button);
        loginButton.setReadPermissions("email","public_profile");
        Log.d("LoginFace", "LoginFace - Button Created");


        // Callback registration
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                handleFacebookAccessToken(loginResult.getAccessToken());
                Log.d("LoginFace", "LoginFace - Sucesso");
                Toast.makeText(getApplicationContext(),
                        "LOGIN REALIZADO", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onCancel() {
                Log.d("LoginFace", "LoginFace - Cancelado");
                Toast.makeText(getApplicationContext(),
                        "LOGIN CANCELADO", Toast.LENGTH_LONG).show();
            }


            @Override
            public void onError(FacebookException exception) {
                Log.d("LoginFace", "LoginFace - Erro");
                Toast.makeText(getApplicationContext(),
                        "LOGIN Erro", Toast.LENGTH_LONG).show();
                Log.d("LoginFace", exception.toString());
            }
        });


    }
}
Run Code Online (Sandbox Code Playgroud)

MyApplication活动中使用的对象

import android.app.Application;
import android.content.Context;
Run Code Online (Sandbox Code Playgroud)

**上面列出了项目中使用的所有对象

API 23日志:

12-02 17:22:26.900 2668-2745 /?D/EGL_emulation:eglMakeCurrent:0xaa9ba4e0:ver 2 0(tinfo 0xac3853a0)

                                            [ 12-02 17:22:26.949  2668: 3361 D/         ]
                                            HostConnection::get() New Host Connection established 0xa19c5800, tid 3361


                                            [ 12-02 17:22:26.950  2668: 3361 W/         ]
                                            Unrecognized GLES max version string in extensions: ANDROID_EMU_CHECKSUM_HELPER_v1
Run Code Online (Sandbox Code Playgroud)

ANDROID_EMU_dma_v1 12-02 17:22:26.977 2668-3361 /?D/EGL_emulation:eglCreateContext:0xaa9ba900:maj 2 min 0 rcv 2 12-02 17:22:26.978 2668-3361 /?D/EGL_emulation:eglMakeCurrent:0xaa9ba900:ver 2 0(tinfo 0xa23bf7e0)12-02 17:22:26.980 2668-3361 /?E/eglCodecCommon:glUtilsParamSize:unknow param 0x00008cdf 12-02 17:22:26.980 2668-3361 /?E/eglCodecCommon:glUtilsParamSize:unknow param 0x00008824 12-02 17:22:26.980 2668-3361 /?E/eglCodecCommon:glUtilsParamSize:unknow param 0x00008cdf 12-02 17:22:26.980 2668-3361 /?E/eglCodecCommon:glUtilsParamSize:unknow param 0x00008824 12-02 17:22:27.135 2668-3361 /?D/EGL_emulation:eglCreateContext:0xaa9ba9c0:maj 2 min 0 rcv 2 12-02 17:22:27.136 2668-3361 /?D/EGL_emulation:eglMakeCurrent:0xaa9ba9c0:ver 2 0(tinfo 0xa23bf7e0)12-02 17:22:29.740 2668-2668/com.cerveja.qof.pedro.qof_cerveja W/BindingManager:无法调用determinVisibility() - 从未看过连接对于pid:2668 12-02 17:22:32.649 2668-2745/com.cerveja.qof.pedro.qof_cerveja D/EGL_emulation:eglMakeCurrent:0xaa9ba4e0:ver 2 0(tinfo 0xac3853a0)12-02 17:22:32.650 2668 -2745/com.cerveja.qof.pedro.qof_cerveja E/Surface:getSlotFromBufferLocked:unknown buffer:0xb40bdc00 12-02 17:22:32.676 2668-3361/com.cerveja.qof.pedro.qof_cerveja D/EGL_emulation:eglMakeCurrent:0xaa9ba900 :ver 2 0(tinfo 0xa23bf7e0)12-02 17:22:32.687 2668-3361/com.cerveja.qof.pedro.qof_cerveja D/EGL_emulation:eglMakeCurrent:0xaa9ba9c0:ver 2 0(tinfo 0xa23bf7e0)12-02 17:22 :32.704 2668-2745/com.cerveja.qof.pedro.qof_cerveja D/EGL_emulation:eglMakeCurrent:0xaa9ba4e0:ver 2 0(tinfo 0xac3853a0)12-02 17:22:32.716 2668-2745/com.cerveja.qof.pedro. qof_cerveja E/eglCodecCommon:glUtilsParamSize:unkn ow param 0x00008cdf 12-02 17:22:32.767 2668-3361/com.cerveja.qof.pedro.qof_cerveja D/EGL_emulation:eglMakeCurrent:0xaa9ba900:ver 2 0(tinfo 0xa23bf7e0)12-02 17:27:05.115 2668-2711 /com.cerveja.qof.pedro.qof_cerveja W/DynamiteModule:找不到com.google.firebase.auth的本地模块描述符类.

最后一个可能是错误原因:

12-02 17:27:05.115 2668-2711/com.cerveja.qof.pedro.qof_cerveja W/DynamiteModule:找不到com.google.firebase.auth的本地模块描述符类.

我该怎么做才能降低所需的API级别?

Tom*_*thu 1

尝试将您的客户端与 Firebase 应用重新同步,然后再次添加 .json 文件。

在 android studio 2.3 中,只需单击“工具”>“firebase”,然后在助手中检查您的应用程序是否已连接。

还要确保 Facebook 开发者帐户和 Firebase 控制台中的包名称正确。

使用最新的 Firebase 库

您可以检查您的 Google Play 服务版本吗?

Android 设备应具有 Google Play 服务 9.0.0 或更高版本

出现此问题的原因之一可能是您的 Firebase > Auth Dashboard 中的登录方法可能被禁用