【发布时间】:2019-10-17 19:22:24
【问题描述】:
我正在尝试将 WhatsApp 的方法用于联系人列表,我只是将我的应用程序的联系人与设备联系人同步。我使用 Firebase 作为我的身份验证平台和数据库 (Firestore)。我正在使用 Firebase Auth UI 进行电话号码身份验证。
我想要实现的是我的应用内联系人列表基本上只加载我的设备联系人,前提是这些联系人也安装了我的应用。就像 WhatsApp 一样。
我已经阅读了 AccountManager 的 official docs 和 like this one 的一些教程,但不知道如何将它们组合在一起。
我的问题是:
AccountAuthenticator的确切作用是什么?开发人员会出于什么目的使用它?我的用例需要AccountAuthenticator吗?我只需要AccountManager.addAccountExplicitly()就可以了吗?如果我确实需要整个 API,如何使用 Firebase Auth UI 进行设置? Auth UI 已经在处理登录流程和所有事情,我已经在 Firestore 中存储了一个用户对象。
在
AccountManager.addAccountExplicitly(accountName, accountType)中,帐户名称应该是什么,帐户类型应该是什么?举个例子吧。
这是我当前的 Firebase 身份验证代码:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_launch)
tilName.visibility = View.GONE
btnSignIn.visibility = View.GONE
Handler().postDelayed({
if (auth.currentUser == null) startActivityForResult(
AuthUI.getInstance().createSignInIntentBuilder()
.setAvailableProviders(listOf(AuthUI.IdpConfig.PhoneBuilder().build()))
.setTheme(R.style.LauncherTheme).build(), rcSignIn
)
else startActivity(Intent(this, MainActivity::class.java))
}, 1000)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == rcSignIn) {
val response = IdpResponse.fromResultIntent(data)
if (resultCode == Activity.RESULT_OK) {
val user = auth.currentUser!!
tilName.visibility = View.VISIBLE
btnSignIn.visibility = View.VISIBLE
btnSignIn.setOnClickListener {
if (etName.text!!.isNotEmpty()) user.updateProfile(
UserProfileChangeRequest.Builder().setDisplayName(etName.text.toString()).build()
).addOnSuccessListener { addUser(user) }.addOnFailureListener {
Log.e("Update User Profile", "Failed To Update User Profile", it)
} else snackBar("You haven't provided a valid name in the Text Field")
}
} else Log.i("User Sign In", "Sign-In Process Failed", response?.error!!)
}
}
private fun addUser(user: FirebaseUser) {
pbSigningUp.visibility = View.VISIBLE
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener {
Log.i("Get FCM Token", "Device Token Retrieved Successfully: ${it.token}")
db.collection("users").document(user.uid).set(User(user.displayName!!, user.phoneNumber!!, it.token))
.addOnSuccessListener {
Log.i("Add User", "New User Added Successfully: ${user.uid}")
startActivity(Intent(this, MainActivity::class.java))
}.addOnFailureListener { e -> Log.e("Add User Failed", "Failed To Add New User", e) }
}.addOnFailureListener { Log.e("Device FCM Token", "Failed To Retrieve Device Token", it) }
}
在我的应用从 Firebase Auth UI 返回后,我询问他的姓名并将所有内容存储在 Firestore 上的用户对象中。
【问题讨论】:
标签: android firebase firebase-authentication firebaseui accountmanager