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

时间:2017-11-30 17:18:44

标签: android facebook firebase firebase-authentication

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

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

太高,大多数用户的API level都较低。

事实上,我打算发布较低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());
            }
        });


    }
}

MyApplication活动中使用的对象

import android.app.Application;
import android.content.Context;

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

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
     

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:不能   call determineVisibility() - 从未看到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:未知缓冲区: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:unknow 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:Local   找不到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级别?

1 个答案:

答案 0 :(得分:1)

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

在android studio 2.3中,只需点击工具&gt; firebase,然后在助手中查看您的应用是否已连接。

并确保在facebook开发者帐户和firebase控制台中包名称正确。

Use the latest Firebase library

您可以查看自己的Google Play服务版本吗?

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

此问题的原因之一可能是,您在Firebase中的登录方法&gt; Autah Dashboard可能已被禁用