I added a facebook login with firebase authentication in my application, but login authentication only works with Android API 24.
When I try to use the lower level API, the screen freezes and the application stops working.
It is too high, most users have an API level.
Indeed, I intend to release an application for lower API levels.
The code I'm using is below.
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 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()); } }); } }
Objects Used in MyApplication Activity
import android.app.Application; import android.content.Context;
** All objects used in the project are listed above.
API 23 log:
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: unknown parameter 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: unknown parameter 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: cannot call definedVisibility () - never seen connection for 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: eglxaqueaa : 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 : 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 26 68-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_emaarenta: 0a : ver 2 0 (tinfo 0xa23bf7e0) 12-02 17: 27: 05.115 2668-2711 / com.cerveja.qof.pedro.qof_cerveja W / DynamiteModule: the local module descriptor class for com.google.firebase.auth was not found.
This last one is probably the cause of the error:
12-02 17: 27: 05.115 2668-2711 / com.cerveja.qof.pedro.qof_cerveja W / DynamiteModule: local module descriptor class for com.google.firebase.auth not found.
What can I do to lower the API level?