I added facebook login with firebase authentication on my application, but the login authentication works only from the Android API 24.
When I try to use a lower level API the screen freezes and the application stops working.
It is too high, most of the users have a lower API level.
Indeed I intend to release the application for lower API levels.
The code I am using is bellow.
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());
}
});
}
}
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: 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: Cannot call determinedVisibility() - never saw a connection for the 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: 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 module descriptor class for com.google.firebase.auth not found.
This final one is probably the error cause:
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 required?
Try resync your client with your Firebase app, and add again the .json file.
In android studio 2.3 just click on tools>firebase and in the assistant check if your app is connected to.
And also make sure that the package name is correct in both facebook developers account and firebase console.
Use the latest Firebase library
Can you check your Google Play Services version?
The Android device should have Google Play services 9.0.0 or later
One of the reason for this problem could be, your Sign In Method inside Firebase > Auth Dashboard might be disabled
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With