getInstance() 不适用于实时数据库中除 us-central1 之外的其他位置

2024-07-04

我正在尝试将用户凭据保存到 Firebase 实时数据库。但是,当我执行该程序时,数据库没有更新。我已正确配置 Firebase 设置,因为身份验证和存储(均为 Firebase)正在运行。

build.gradle:

dependencies {
    ...
    // Firebase SDK setup
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:28.0.1')

    // Declare the dependency for the Firebase library
    implementation 'com.google.firebase:firebase-storage-ktx'
    implementation 'com.google.firebase:firebase-auth-ktx'
    implementation 'com.google.firebase:firebase-database-ktx'
}

apply plugin: 'com.google.gms.google-services'

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package=<NAME>>

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
      ...
    </application>

</manifest>

注册类别(MWE):

class RegisterActivity : AppCompatActivity() {

    var selectedPhotoUri: Uri? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Register UI
        register_button_register.setOnClickListener {
            performRegister()
        }
    }

    // Register user credentials
    private fun performRegister() {
        val email = email_editText_register.text.toString()
        val password = password_editText_register.text.toString()

        // Firebase Authentication - WORKING
        FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener {
                uploadImageToFirebaseStorage()
            }
    }

    // Upload selected photo to Firebase Storage - WORKING
    private fun uploadImageToFirebaseStorage() {
        if(selectedPhotoUri == null)    return

        val filename = UUID.randomUUID().toString()
        val ref = FirebaseStorage.getInstance().getReference("/images/$filename")

        ref.putFile(selectedPhotoUri!!)

        ref.downloadUrl.addOnSuccessListener {
            saveUserToFirebaseDatabase(it.toString())
        }
    }

    // Save user associated credentials to Firebase Database - NOT WORKING
    private fun saveUserToFirebaseDatabase(profileImageURL: String) {
        val uid = FirebaseAuth.getInstance().uid ?: ""
        val ref = Firebase.database.getReference("/users/$uid")
        val user = User(uid, username_editText_register.text.toString(), profileImageURL)

        ref.setValue(user)
    }
}

// User credentials to be saved
class User(val uid: String, val username: String, val profileImageURL: String)

The saveUserToFirebaseDatabase()方法没有被执行?我检查过logcat插入后onSuccessListener and onFailureListener语句,但是没有突出显示错误或调试信息。该应用程序。将图像推送到存储,但数据库未更新。它仍然是空的。工作流程如下:

- Authenticate user by email and password. - WORKING
- Save profile image in Storage. - WORKING
- Save profile identifier, username, and image in DB. - NOT WORKING

Firebase 数据库规则:

{
  "rules": {
    ".read": "true",
    ".write": "true"
  }
}

我尝试更改层次结构,但这也不起作用:

val uid = FirebaseAuth.getInstance().uid ?: ""
val ref = Firebase.database.getReference("/users/$uid")
val user = User(uid, username_edittext_register.text.toString(), profileImageUrl)
   
ref.child("users").child(uid).setValue(user)

我已阅读 Firebase 文档,一切似乎都已就位。我还禁用了防火墙,但这也不起作用。有人可以指出这里的问题吗?先感谢您。


要获取对除(默认)“us-central1”之外的 Firebase 实时数据库的引用(例如“europe-west1”),您必须将数据库 URL 传递给获取实例() https://firebase.google.com/docs/reference/android/com/google/firebase/database/FirebaseDatabase#getInstance(java.lang.String) method.

对于“us-central1”则不需要这样做,您可以简单地调用“getInstance()”方法而不传递任何参数。

有关更多信息,请查看有关实时数据库位置的官方文档:

  • https://firebase.google.com/docs/projects/locations#rtdb-locations https://firebase.google.com/docs/projects/locations#rtdb-locations

作为替代解决方案,您可以下载最新的google-services.json从 Firebase 控制台并将其添加到您的应用程序中。如果该位置的正确 URL 位于其中,那么当您调用时 SDK 将从那里读取它FirebaseDatabase.getInstance()不传递任何参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

getInstance() 不适用于实时数据库中除 us-central1 之外的其他位置 的相关文章

随机推荐