我正在尝试firebase auth UI ins简单的Jetpack项目。我按照说明here。
但是没有显示已登录的UI流程,而是显示了主要活动,即空约束布局。
我的代码如下
Manaktivitykkt
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.firebase.ui.auth.AuthUI
import com.google.firebase.auth.FirebaseAuth
class MainActivity : AppCompatActivity() {
private lateinit var mFirebaseAuth: FirebaseAuth
private lateinit var mAuthStateListener: FirebaseAuth.AuthStateListener
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initialize Firebase Auth
mFirebaseAuth = FirebaseAuth.getInstance()
mAuthStateListener = FirebaseAuth.AuthStateListener { firebaseAuth -> // line 25
val user = firebaseAuth.currentUser
if (user != null){
Toast.makeText(applicationContext, "Already signed in", Toast.LENGTH_LONG).show()
}
else{
// Choose authentication providers
val providers = arrayListOf(
AuthUI.IdpConfig.EmailBuilder().build(),
AuthUI.IdpConfig.GoogleBuilder().build())
// Create and launch sign-in intent
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setIsSmartLockEnabled(false)
.setAvailableProviders(providers)
.setTheme(R.style.AppTheme) // Set theme
.setAvailableProviders(providers)
.setTosAndPrivacyPolicyUrls(
"https://example.com/terms.html",
"https://example.com/privacy.html")
.build(),
RC_SIGN_IN)
}
}
}
public override fun onStart() {
super.onStart()
mFirebaseAuth.addAuthStateListener { mAuthStateListener }
}
override fun onPause() {
super.onPause()
mFirebaseAuth.removeAuthStateListener { mAuthStateListener }
}
companion object {
private const val RC_SIGN_IN = 123
}
}
依赖
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0-alpha02'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
// firebase
implementation 'com.firebaseui:firebase-ui-auth:4.3.1'
implementation 'com.google.firebase:firebase-core:16.0.6'
implementation 'com.google.firebase:firebase-auth:16.1.0'
implementation 'com.google.android.gms:play-services-auth:16.0.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.2-alpha01'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.2-alpha01'
}
对于提供商,您可以看到我只使用电子邮件和Google登录。这些提供程序在firebase控制台中启用。我还在项目中指定了指纹(默认情况下是这样)。
我通过在第25行设置断点来尝试调试,我看到AuthStateListener
lambda没有被执行。我不知道为什么。
请帮忙!
更新:
根据彼得在他的回答中提供的指示,依赖关系更新如here所述,但问题仍然存在。
既然您使用的是FirebaseUI 4.1.0
版本,那么根据文档:
从版本4.1.0开始,FirebaseUI具有以下依赖版本:
Library Version
firebase-auth 16.0.1
play-services-auth 15.0.1
firebase-database 16.0.1
firebase-firestore 17.0.1
firebase-storage 16.0.1
更多信息:
https://github.com/firebase/FirebaseUI-Android/tree/version-4.1.0
实际上在github repo上发布issue之后,我发现当有互联网连接时出现了登录流程(在我的情况下,它保持Wifi打开)。
所以这个问题允许回购的一个成员识别Firebase Auth UI(Android)中的一个缺陷,他创建了一个pull request,允许最终用户在离线时选择auth方法。