我正在尝试制作一个Android应用程序,在该应用程序中,用户可以通过Firebase用户身份验证和Firebase UI使用带有电子邮件和密码的Google帐户登录。我尝试使用下面的Java代码编写。我想承认大括号在此处编写代码时可能放错了位置,但是在android studio中,大括号没有这样的问题。我尚未编写activity_main.xml代码,因为我认为FirebaseUI会在流本身中添加登录。附上所有对我有帮助的图像。
package com.example.findaplayer;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import com.firebase.ui.auth.AuthUI;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private FirebaseAuth mFirebaseAuth;
private FirebaseAuth.AuthStateListener mAuthStateListener ;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFirebaseAuth = FirebaseAuth.getInstance();
mAuthStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
Toast.makeText(MainActivity.this, "Welcome to findaplayer app",
Toast.LENGTH_SHORT).show();
} else {
// Choose authentication providers
List<AuthUI.IdpConfig> providers = Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.PhoneBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().build(),
new AuthUI.IdpConfig.FacebookBuilder().build(),
new AuthUI.IdpConfig.TwitterBuilder().build());
// Create and launch sign-in intent
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.build(),
1) ;
}
}
};
}
}
我在事件日志中没有收到任何错误,如随附的名为事件日志的屏幕快照所示。我面临的问题是,当此应用在模拟器上运行时,它没有显示登录选项,而是显示了问候世界,而我认为它的显示应包括登录选项,因为Firebase UI库正用于此目的。
您声明了mAuthStateListener
侦听器,但从未告诉Firebase Auth SDK将其与addAuthStateListener()一起使用:
FirebaseAuth.getInstance().addAuthStateListener(mAuthStateListener);