Android Studio Google 登录弹出窗口
Android Studio Google SignIn pop up
我正在尝试使用 Firebase Google 身份验证制作登录页面,但是选择电子邮件的弹出页面不会显示。它以前是工作的,但我一定是不小心改变了一些东西......我按照这个 https://www.youtube.com/watch?v=FtIc5UYXeKk Youtube 教程开始让它工作,但在重新观看之后我仍然无法找出问题所在。有谁知道可能是什么问题?
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GoogleAuthProvider;
import java.util.Objects;
public class LoginActivity extends AppCompatActivity implements
View.OnClickListener {
private static final int RC_SIGN_IN = 123;
FirebaseAuth mAuth;
GoogleSignInClient mGoogleSignInClient;
ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
findViewById(R.id.sign_in_button).setOnClickListener(this);
mAuth=FirebaseAuth.getInstance();
progressBar=findViewById(R.id.progress_circular);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
// Build a GoogleSignInClient with the options specified by gso
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
SignInButton signInButton = findViewById(R.id.sign_in_button);
signInButton.setSize(SignInButton.SIZE_WIDE);
signInButton.setColorScheme(SignInButton.COLOR_LIGHT);
}
private void signIn() {
progressBar.setVisibility(View.VISIBLE);
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
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 GoogleSignInClient.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
GoogleSignInAccount account = task.getResult(ApiException.class);
if (account != null) {
firebaseAuthWithGoogle(account);
} else{
Log.w("AUTH", "Account is NULL");
Toast.makeText(LoginActivity.this, "Sign-in failed, try again later.", Toast.LENGTH_LONG).show();
}
} catch (ApiException e) {
Log.w("AUTH", "Google sign in failed", e);
Toast.makeText(LoginActivity.this, "Sign-in failed, try again later.", Toast.LENGTH_LONG).show();
}
}
}
// Firebase Google Authentication
private void firebaseAuthWithGoogle(GoogleSignInAccount account) {
Log.d("TAG", "firebaseAuthWithGoogle: " + account.getId());
AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(),null);
mAuth.signInWithCredential(credential).addOnCompleteListener(this,task -> {
if (task.isSuccessful()){
progressBar.setVisibility(View.INVISIBLE);
Log.d("TAG", "SignIn sucess");
boolean newuser = Objects.requireNonNull(Objects.requireNonNull(task.getResult()).getAdditionalUserInfo()).isNewUser();
if(newuser){
Log.d("TAG", "new");
Intent intent = new Intent(LoginActivity.this, WelcomeActivity.class);
startActivity(intent);
}else{
Log.d("TAG", "welcome back");
FirebaseUser user = mAuth.getCurrentUser();
updateUI(user);
}
}
else{
progressBar.setVisibility(View.INVISIBLE);
Log.w("TAG", "failure ", task.getException());
Toast.makeText(this, "SignIn Failed!", Toast.LENGTH_SHORT).show();
updateUI(null);
}
});
}
private void updateUI(FirebaseUser user) {
if (user != null){
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
}
else{
Log.d("TAG", "updateUI:");
}
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.sign_in_button) {
signIn();
}
}
}
退出时请使用 GoogleSignInClient
退出
GoogleSignInClient.signOut()
完整代码:
private void signOut() {
// Firebase sign out
mAuth.signOut();
mGoogleSignInClient.signOut().addOnCompleteListener(this,
new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
updateUI(null);
}
});
}
我正在尝试使用 Firebase Google 身份验证制作登录页面,但是选择电子邮件的弹出页面不会显示。它以前是工作的,但我一定是不小心改变了一些东西......我按照这个 https://www.youtube.com/watch?v=FtIc5UYXeKk Youtube 教程开始让它工作,但在重新观看之后我仍然无法找出问题所在。有谁知道可能是什么问题?
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GoogleAuthProvider;
import java.util.Objects;
public class LoginActivity extends AppCompatActivity implements
View.OnClickListener {
private static final int RC_SIGN_IN = 123;
FirebaseAuth mAuth;
GoogleSignInClient mGoogleSignInClient;
ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
findViewById(R.id.sign_in_button).setOnClickListener(this);
mAuth=FirebaseAuth.getInstance();
progressBar=findViewById(R.id.progress_circular);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
// Build a GoogleSignInClient with the options specified by gso
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
SignInButton signInButton = findViewById(R.id.sign_in_button);
signInButton.setSize(SignInButton.SIZE_WIDE);
signInButton.setColorScheme(SignInButton.COLOR_LIGHT);
}
private void signIn() {
progressBar.setVisibility(View.VISIBLE);
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
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 GoogleSignInClient.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
GoogleSignInAccount account = task.getResult(ApiException.class);
if (account != null) {
firebaseAuthWithGoogle(account);
} else{
Log.w("AUTH", "Account is NULL");
Toast.makeText(LoginActivity.this, "Sign-in failed, try again later.", Toast.LENGTH_LONG).show();
}
} catch (ApiException e) {
Log.w("AUTH", "Google sign in failed", e);
Toast.makeText(LoginActivity.this, "Sign-in failed, try again later.", Toast.LENGTH_LONG).show();
}
}
}
// Firebase Google Authentication
private void firebaseAuthWithGoogle(GoogleSignInAccount account) {
Log.d("TAG", "firebaseAuthWithGoogle: " + account.getId());
AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(),null);
mAuth.signInWithCredential(credential).addOnCompleteListener(this,task -> {
if (task.isSuccessful()){
progressBar.setVisibility(View.INVISIBLE);
Log.d("TAG", "SignIn sucess");
boolean newuser = Objects.requireNonNull(Objects.requireNonNull(task.getResult()).getAdditionalUserInfo()).isNewUser();
if(newuser){
Log.d("TAG", "new");
Intent intent = new Intent(LoginActivity.this, WelcomeActivity.class);
startActivity(intent);
}else{
Log.d("TAG", "welcome back");
FirebaseUser user = mAuth.getCurrentUser();
updateUI(user);
}
}
else{
progressBar.setVisibility(View.INVISIBLE);
Log.w("TAG", "failure ", task.getException());
Toast.makeText(this, "SignIn Failed!", Toast.LENGTH_SHORT).show();
updateUI(null);
}
});
}
private void updateUI(FirebaseUser user) {
if (user != null){
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
}
else{
Log.d("TAG", "updateUI:");
}
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.sign_in_button) {
signIn();
}
}
}
退出时请使用 GoogleSignInClient
退出GoogleSignInClient.signOut()
完整代码:
private void signOut() {
// Firebase sign out
mAuth.signOut();
mGoogleSignInClient.signOut().addOnCompleteListener(this,
new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
updateUI(null);
}
});
}