dodałem Facebook login z Firebase uwierzytelniania w mojej aplikacji, ale uwierzytelniania logowania działa tylko z systemem Android API 24.Logowanie do serwisu Facebook działa tylko z interfejsu API 24 - nie znaleziono klasy deskryptora modułu lokalnego dla pliku com.google.firebase.auth. Błąd
Kiedy próbuję użyć niższy poziom API ekran zamarza i aplikacja przestaje działać.
Jest zbyt wysoka, większość użytkowników ma niższy API level.
Rzeczywiście zamierzam wydać wniosek o obniżenie poziomu interfejsu API.
Kod, którego używam, jest poniżej.
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());
}
});
}
}
przedmiotów używanych aktywności myApplication
import android.app.Application;
import android.content.Context;
** Wszystkie obiekty stosowane w projekcie są wymienione powyżej
API 23 log:
12-02 17:22 : 26.900 2668-2745 /? D/EGL_emulation: eglMakeCurrent: 0xaa9ba4e0: Wersja 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 02/12 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_emulacja: 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: Can not call determinedVisibility() - never zobaczyłem połączenie dla 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/Powierzchnia: 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 26 68-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: wersja 2 0 (tinfo 0xac3853a0) 12-02 17: 22: 32,716 2668-2745/com.cerveja.qof.pedro.qof_cerveja E/eglCodecCommon: glUtilsParamSize: nieznane param 0x00008cdf 12-02 17: 22: 32.767 2668-3361/com.cerveja.qof.pedro.qof_cerveja D/EGL_emulation: eglMakeCurrent: 0xaa9ba900: Wersja 2 0 (tinfo 0xa23bf7e0) 02/12 17: 27: 05.115 2668-2711/com.cerveja.qof.pedro.qof_cerveja W/DynamiteModule: lokalny moduł klasy deskryptor com.google.firebase.auth nie znaleziono.
Ten ostatni z nich jest prawdopodobnie przyczyną błędu:
12-02 17: 27: 05,115 2668-2711/com.cerveja.qof.pedro.qof_cerveja W/DynamiteModule: Lokalny moduł klasy deskryptor com .google.firebase.auth nie znaleziono.
Co mogę zrobić, aby obniżyć wymagany poziom interfejsu API?
Mój poziom API 15 i działający jak wdzięk – androidXP
Może to być problem z twoimi zależnościami budowania lub wersją usług Google Play na twoim urządzeniu. Wyjaśnij więcej na temat awarii urządzeń z interfejsem API poniżej 23. –
Jak mogę to sprawdzić? Aplikacja po prostu zawiesza się, nie wskazuje żadnego błędu na logcat. – Siqueira