[英]Google signin api not working android studio using firebase
I'm trying to sign in from google using firebase but it's not working and GoogleSignInResult result not giving any error.我正在尝试使用 firebase 从 google 登录,但它不起作用,而且 GoogleSignInResult 结果没有给出任何错误。 Please check the code and tell me what's happening to my code.请检查代码并告诉我我的代码发生了什么。
package com.tube.ui;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GoogleAuthProvider;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.InstanceIdResult;
import com.tube.R;
public class SignInActivity extends AppCompatActivity {
private GoogleApiClient mGoogleApiClient;
private SignInButton mGoogleBtn;
private static final int RC_SIGN_IN = 2;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private static final String TAG = "SignInActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_in);
mGoogleBtn = findViewById(R.id.sign_in_button);
mGoogleBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
signIn();
}
});
mAuth = FirebaseAuth.getInstance(); //HMM...
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if (firebaseAuth.getCurrentUser() != null) {
startActivity(new Intent(SignInActivity.this, MainActivity.class)); //Switch activities
}
}
};
// Configure Google Sign In
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestProfile()
.requestEmail()
.build();
// Build a GoogleSignInClient with the options specified by gso.
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Toast.makeText(SignInActivity.this,"Something went wrong",Toast.LENGTH_SHORT).show();
}
})
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
}
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
Toast.makeText(SignInActivity.this,"It's working here...",Toast.LENGTH_SHORT).show();
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = result.getSignInAccount();
firebaseAuthWithGoogle(account);
Toast.makeText(SignInActivity.this,"Sign In Successful...",Toast.LENGTH_SHORT).show();
fetchToken();
}
if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
Auth.GoogleSignInApi.signOut(mGoogleApiClient);
}
else {
Toast.makeText(SignInActivity.this,"Auth went wrong",Toast.LENGTH_SHORT).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()) {
// Sign in success, update UI with the signed-in user's information
Log.d("TAG", "signInWithCredential:success");
FirebaseUser user = mAuth.getCurrentUser();
//updateUI(user);
} else {
// If sign in fails, display a message to the user.
Log.w("TAG", "signInWithCredential:failure", task.getException());
Toast.makeText(SignInActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
//updateUI(null);
}
// ...
}
});
}
/**
* Fetches firebase token for single device testing
*/
private void fetchToken(){
// Get token
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
Log.w(TAG, "getInstanceId failed", task.getException());
return;
}
// Get new Instance ID token
String token = task.getResult().getToken();
// Log and toast
String msg = getString(R.string.msg_token_fmt, token);
Log.d(TAG, msg);
}
});
}
}
I've enabled google api and tried all method but unable to finding out bug because no error message showing runtime in Android Studio.我启用了 google api 并尝试了所有方法,但无法找出错误,因为在 Android Studio 中没有显示运行时的错误消息。
At first please ensure, that you have enabled Google SignIn Authentication in your Firebase Console.首先,请确保您已在 Firebase 控制台中启用 Google 登录身份验证。 (Authentication --> Tab "Sign-in method") Then check your "Web-Client-ID". (身份验证 --> 选项卡“登录方法”)然后检查您的“Web-Client-ID”。 Does this fit to the settings in your "google-services.json" in your Android project?这是否适合您的 Android 项目中“google-services.json”中的设置?
I use "implementation 'com.firebaseui:firebase-ui-auth:4.3.1'" in my build.gradle in my project to have a pre-default UI for the Firebase Authentication.我在我的项目中的 build.gradle 中使用“实现 'com.firebaseui:firebase-ui-auth:4.3.1'”来为 Firebase 身份验证提供一个预默认 UI。
The following code worked for me for implementing the sign in mehtod:以下代码适用于我在 mehtod 中实现登录:
private static final int RC_SIGN_IN = 123;
private FirebaseAuth auth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
auth = FirebaseAuth.getInstance()
if (auth.getCurrentUser() != null) {
Log.i(TAG, "-------------------------------------------");
Log.i(TAG, auth.getCurrentUser().toString());
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
IdpResponse response = IdpResponse.fromResultIntent(data);
if (resultCode == RESULT_OK) {
// Successfully signed in
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
Log.i(TAG, "logged in");
if (user != null) {
// Name, email address, and profile photo Url
String name = user.getDisplayName();
String email = user.getEmail();
Uri photoUrl = user.getPhotoUrl();
// The user's ID, unique to the Firebase project. Do NOT use this value to
// authenticate with your backend server, if you have one. Use
// FirebaseUser.getIdToken() instead.
String uid = user.getUid();
}
}
if (resultCode != RESULT_OK && shouldStartSignIn()) {
// Sign in failed. If response is null the user canceled the
// sign-in flow using the back button. Otherwise check
// response.getError().getErrorCode() and handle the error.
String err = Integer.toString(response.getError().getErrorCode());
Log.i(TAG, "no login");
Log.i(TAG, err);
startSignIn();
}
}
}
/**
* Check if a FirebaseUser is logged in
* @return
*/
private boolean shouldStartSignIn() {
return (!mainActivityViewModel.getIsSignedIn() && FirebaseAuth.getInstance().getCurrentUser() == null);
}
/**
* Show Login module with Firebase UI
*/
private void startSignIn() {
// Firebase Authentication Providers
List<AuthUI.IdpConfig> providers = Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().build());
// Create and launch sign-in intent for Firebase Authentication
Intent intent = AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.setTheme(R.style.AppTheme_NoActionBar)
.setIsSmartLockEnabled(false)
.build();
startActivityForResult(intent, RC_SIGN_IN);
mainActivityViewModel.setIsSignedIn(true);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.