- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发 firebase 演示应用程序,其中添加了 firebase facebook 以及 google 登录,因此 google 工作正常,但每当我尝试使用 facebook 登录时,它都会在运行时抛出身份验证失败
,因此我将尝试所有 stackOverflow 解决方案,但它不起作用,所以有人知道如何解决这个问题吗?
以下是我的登录代码:-
public class SplashScreen extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
//constant values
public static final String USER_NAME="com.gaurav.javascripttutorial.username";
public static final String USER_IMAGE="com.gaurav.javascripttutorial.userimage";
public static final String USER_ID="com.gaurav.javascripttutorial.userid";
int RC_SIGN_IN = 1000;
//Firebase
FirebaseAuth mAuth;
GoogleApiClient mGoogleApiClient;
CallbackManager mCallbackManager;
//views
private SignInButton googleLogin;
private LoginButton facebookLogin;
private ProgressDialog dialog;
//Shared Preference
SharedPreferences pref;
SharedPreferences.Editor editor;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.setApplicationId(getString(R.string.fb_app_id));
FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout.main_splashscreen);
googleLogin = (SignInButton) findViewById(R.id.googleLogin);
facebookLogin = (LoginButton) findViewById(R.id.facebookLogin);
pref = this.getSharedPreferences("user",0);
editor = pref.edit();
dialog = new ProgressDialog(this);
dialog.setMessage("Loading, Please wait....");
//Google configuration
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.requestProfile()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API,gso)
.build();
//Facebook configuration
mCallbackManager = CallbackManager.Factory.create();
mAuth = FirebaseAuth.getInstance();
if (mAuth.getCurrentUser()!= null){
FirebaseUser user = mAuth.getCurrentUser();
editor.clear();
editor.putString(USER_NAME,user.getDisplayName());
editor.putString(USER_ID, user.getUid());
editor.putString(USER_IMAGE, user.getPhotoUrl().toString());
editor.commit();
Intent intent = new Intent(SplashScreen.this, MainActivity.class);
startActivity(intent);
finish();
}
googleLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
googleSignIn();
}
});
facebookLogin.setReadPermissions("email","public_profile");
facebookLogin.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
handleFacebookAccessToken(loginResult.getAccessToken());
}
@Override
public void onCancel() {
Toast.makeText(SplashScreen.this, "Facebook login cancel.", Toast.LENGTH_LONG).show();
}
@Override
public void onError(FacebookException error) {
Toast.makeText(SplashScreen.this, "Something went wrong! Please try again", Toast.LENGTH_LONG).show();
}
});
}
private void googleSignIn(){
Intent intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(intent,RC_SIGN_IN);
}
private void handleFacebookAccessToken(AccessToken token){
final 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
FirebaseUser user = mAuth.getCurrentUser();
editor.clear();
editor.putString(USER_NAME,user.getDisplayName());
editor.putString(USER_ID, user.getUid());
editor.putString(USER_IMAGE, user.getPhotoUrl().toString());
editor.commit();
Intent intent = new Intent(SplashScreen.this, MainActivity.class);
startActivity(intent);
finish();
dialog.dismiss();
} else {
// If sign in fails, display a message to the user.
Toast.makeText(SplashScreen.this, "Authentication failed.", Toast.LENGTH_LONG).show();
}
}
});
}
private void firebaseAuthWithGoogle(GoogleSignInAccount account){
AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(),null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
FirebaseUser user = mAuth.getCurrentUser();
editor.clear();
editor.putString(USER_NAME,user.getDisplayName());
editor.putString(USER_ID, user.getUid());
editor.putString(USER_IMAGE, user.getPhotoUrl().toString());
editor.commit();
Intent intent = new Intent(SplashScreen.this, MainActivity.class);
startActivity(intent);
finish();
dialog.dismiss();
}else {
Toast.makeText(SplashScreen.this, "Authentication Failed", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mCallbackManager.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN){
if (resultCode == RESULT_OK) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
dialog.show();
if (result.isSuccess()) {
GoogleSignInAccount account = result.getSignInAccount();
firebaseAuthWithGoogle(account);
} else {
Log.d("Status", String.valueOf(result.getStatus().getStatusCode()));
Toast.makeText(this, "SignIn failed", Toast.LENGTH_SHORT).show();
}
}else {
Toast.makeText(this, "Result Code error", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_LONG).show();
}
}
最佳答案
假设您已正确配置所有内容(否则 read the docs ),这对我来说工作正常(Kotlin 代码,抱歉。如果您需要 Java,只需进行翻译):
我的Activity
扩展了AppCompatActivity
:
class ActivityLogin : AppCompatActivity() {
private val callbackManager: CallbackManager = CallbackManager.Factory.create()
private val mAuth: FirebaseAuth = FirebaseAuth.getInstance()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_splashscreen)
loginButton.setReadPermissions("email", "public_profile")
loginButton.registerCallback(callbackManager, object : FacebookCallback<LoginResult> {
override fun onSuccess(result: LoginResult) {
handleFacebookAccessToken(result.accessToken)
}
override fun onCancel() {
Toast.makeText(this@ActivityLogin, "Facebook Authentication canceled.", Toast.LENGTH_SHORT).show()
}
override fun onError(error: FacebookException?) {
Toast.makeText(this@ActivityLogin, "Facebook Authentication failed.", Toast.LENGTH_SHORT).show()
}
})
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
super.onActivityResult(requestCode, resultCode, data)
callbackManager.onActivityResult(requestCode, resultCode, data)
}
private fun handleFacebookAccessToken(token: AccessToken) {
val credential = FacebookAuthProvider.getCredential(token.token)
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
val mainIntent = Intent(this@ActivityLogin, ActivityFeed::class.java)
startActivity(mainIntent)
finish()
} else {
Toast.makeText(this@ActivityLogin, "Firebase Authentication failed.", Toast.LENGTH_SHORT).show()
}
}
}
}
如您所见,无需调用
FacebookSdk.setApplicationId(getString(R.string.fb_app_id));
FacebookSdk.sdkInitialize(getApplicationContext());
在您的 Activity 的 onCreate()
期间。
关于java - firebase facebook 登录时出现身份验证失败错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47265799/
我正在尝试为我的用户提供使用 Google 或 Facebook 登录的选项。到目前为止,我找到了一个实现 Google 登录流程的示例,但如果我可以在同一 Activity 中实现类似的 Faceb
我有一个网页,它对用户是否登录很敏感。我使用的是 Google 登录 Javascript SDK。当用户到达此页面时,我想显示一个插页式广告(“正在加载...”),然后 1)如果用户已登录则呈现页面
我用 digitalocean 创建了一个 droplet,并使用 apt install mariadb-server 命令安装了 mariadb。现在我想使用 php 连接到我的服务器,我使用这个
这个问题在这里已经有了答案: Inno Setup - Signing fails with "Sign Tool failed with exit code 0x1" (2 个回答) 3年前关闭。
我正在尝试使用他们的新 API 实现 google 登录:https://developers.google.com/identity/sign-in/web/ 登录和注销工作正常。我的问题是我不知道
我的应用程序具有谷歌登录、Facebook 登录和 braintree 集成。 我已将以下代码放入 appdelegate.swift 中: func application(_ applicatio
我有一个 Flask 应用程序,最近在我的登录/退出表单中实现了 Flask-Login: @account.route('/sign-in', methods=['POST', 'GET']) de
friend 们,我是初学者级别的 ios swift 学习者。我一直在尝试在我的试用应用程序中进行谷歌登录。根据来自谷歌开发人员和其他教程的资源,我成功地使用 UIView 进行了登录。然后我试图在
我正在使用 Ionic 在 Codeigniter/Ion_Auth/codeigniter-restclient 之上构建登录系统,当我尝试从“ionic 服务器”登录时,登录可以正常工作,但对 L
在 Docker 文件中我有这个 FROM ubuntu RUN apt update && apt -y upgrade RUN apt install -y sudo # Setup ops us
对于 Java 开发,我使用 Slf4j 和 Logback。 Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.de
在 Scala 应用程序中进行日志记录的好方法是什么?与语言哲学一致的东西,不会使代码困惑,并且维护成本低且不引人注目。以下是基本要求列表: 简单 不会使代码困惑。 Scala 以其简洁而著称。我不希
我正在尝试将我的登录名转换为 Retrofit2 我的旧 LoginActivity: public class LoginActivity extends Activity { private st
我正在尝试让 google+ 登录在 android 上运行。我的问题是,每当我使用 eclipse 运行它时,google 开发站点上提供的示例都能完美运行。当我签署 apk 并在我的设备上手动安装
这个问题已经有答案了: JS Simple but Safe Login? [closed] (1 个回答) 已关闭 6 年前。 我正在尝试使用 JavaScript 创建登录页面。它实际上只是一个带
其他章节请看: react 高效高质量搭建后台系统 系列 登录 本篇将完成 登录模块 。效果和 spug 相同: 需求 如下:
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 1 年前。
我在使用 ReactJs 中的 facebook-login 组件时遇到问题,代码与文档中的完全一样,但仍然无法正常工作。你能帮我找出我做错了什么吗? import React, { Componen
我有一个项目,其中包含许多具有自己的日志记录的“工具”类。这些日志文件是在应用程序启动时创建的,但在使用之前一直为空。 是否可以告诉logback在启动时不应该创建空文件?但是仅在使用它们时? 不知何
我正在创建一个需要用户授权才能访问某些功能的网站。我目前正在研究用户如何创建帐户以及如何利用 session 来授权他们的登录。用户信息存储在名为 user 的 MySQL 表中,其中可能包括用户名和
我是一名优秀的程序员,十分优秀!