- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在我的应用程序上添加了带有 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 Activity 中使用的对象
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_v1ANDROID_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.
这最后一个可能是错误原因:
12-02 17:27:05.115 2668-2711/com.cerveja.qof.pedro.qof_cerveja W/DynamiteModule:找不到 com.google.firebase.auth 的本地模块描述符类。
如何降低所需的 API 级别?
最佳答案
尝试将您的客户端与您的 Firebase 应用程序重新同步,然后再次添加 .json 文件。
在 android studio 2.3 中,只需单击工具>firebase,然后在助手中检查您的应用是否已连接。
还要确保 facebook 开发者帐户和 firebase 控制台中的包名称都是正确的。
Use the latest Firebase library
你能检查一下你的 Google Play 服务版本吗?
Android 设备应具有 Google Play 服务 9.0.0 或更高版本
此问题的原因之一可能是您在 Firebase 中的登录方法 > 身份验证仪表板可能已被禁用
关于android - Facebook 登录仅适用于 API 24 - 找不到 com.google.firebase.auth 的本地模块描述符类。错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47579107/
我在我的 Xcode 项目目录中输入了以下内容: keytool -genkey -v -keystore release.keystore -alias mykey -keyalg RSA \
假设我有一个像这样的 DataFrame(或 Series): Value 0 0.5 1 0.8 2 -0.2 3 None 4 None 5 None
我正在对一个 Pandas 系列进行相对繁重的应用。有什么方法可以返回一些打印反馈,说明每次调用函数时在函数内部进行打印还有多远? 最佳答案 您可以使用跟踪器包装您的函数。以下两个示例,一个基于完成的
我有一个 DataFrame,其中一列包含列表作为单元格内容,如下所示: import pandas as pd df = pd.DataFrame({ 'col_lists': [[1, 2
我想使用 Pandas df.apply 但仅限于某些行 作为一个例子,我想做这样的事情,但我的实际问题有点复杂: import pandas as pd import math z = pd.Dat
我有以下 Pandas 数据框 id dist ds 0 0 0 0 5 1 0 0 7 2 0 0
这发生在我尝试使用 Gradle 构建时。由于字符串是对象,因此似乎没有理由发生此错误: No signature of method: java.util.HashMap.getOrDefault(
您好,有人可以解释为什么在 remaining() 函数中的 Backbone 示例应用程序 ( http://backbonejs.org/examples/todos/index.html ) 中
我有两个域类:用户 class User { String username String password String email Date dateCreated
问题陈述: 一个 pandas dataframe 列系列,same_group 需要根据两个现有列 row 和 col 的值从 bool 值创建。如果两个值在字典 memberships 中具有相似
apporable 报告以下错误: error: unknown type name 'MKMapItem'; did you mean 'MKMapView'? MKMapItem* destina
我有一个带有地址列的大型 DataFrame: data addr 0 0.617964 IN,Krishnagiri,635115 1 0.635428 IN,Chennai
我有一个列表list,里面有这样的项目 ElementA: Number=1, Version=1 ElementB: Number=1, Version=2 ElementC: Number=1,
我正在编译我的源代码,它只是在没有运行应用程序的情况下终止。这是我得到的日志: Build/android-armeabi-debug/com.app4u.portaldorugby/PortalDo
我正在尝试根据另一个单元格的值更改单元格值(颜色“红色”或“绿色”)。我运行以下命令: df.loc[0, 'Colour'] = df.loc[0, 'Count'].apply(lambda x:
我想弄清楚如何使用 StateT结合两个 State基于对我的 Scalaz state monad examples 的评论的状态转换器回答。 看来我已经很接近了,但是在尝试申请 sequence
如果我已经为它绑定(bind)了集合,我该如何添加 RibbonLibrary 默认的快速访问项容器。当我从 UI 添加快速访问工具项时,它会抛出 Operation is not valid whi
在我学习期间Typoclassopedia我遇到了这个证明,但我不确定我的证明是否正确。问题是: One might imagine a variant of the interchange law
我是一名优秀的程序员,十分优秀!