我在我的应用程序中添加了使用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级别?
答案 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可能已被禁用