未能获取 FirebaseDatabase 实例。在 FirebaseApp 中指定 DatabaseURL

Posted

技术标签:

【中文标题】未能获取 FirebaseDatabase 实例。在 FirebaseApp 中指定 DatabaseURL【英文标题】:Failed to get FirebaseDatabase instance. Specify DatabaseURL within FirebaseApp 【发布时间】:2018-05-23 16:14:09 【问题描述】:

FirebaseApp 在调用FirebaseDatabase.getInstance() 时抛出异常。

错误信息

无法获取 FirebaseDatabase 实例:在其中指定 DatabaseURL FirebaseApp 或来自您的 getInstance() 调用。

Firebase 项目配置正确。 Authentication 正常工作,但无法连接到 firebase

这是我的应用级 gradle.build 文件

build.gradle

dependencies 
    .....

    //Firebase database
    implementation 'com.google.firebase:firebase-database:11.6.2'
    // Firebase Invitation
    implementation 'com.google.firebase:firebase-invites:11.6.2'
    // Firebase Authentication
    implementation 'com.google.firebase:firebase-auth:11.6.2'
    // Google Sign In SDK (only required for Google Sign In)
    implementation 'com.google.android.gms:play-services-auth:11.6.2'

    // people api request libraries
    implementation 'com.google.api-client:google-api-client:1.22.0'
    implementation 'com.google.api-client:google-api-client-android:1.22.0'
    implementation 'com.google.apis:google-api-services-people:v1-rev4-1.22.0'
    compile project(':customsupport')


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

和项目级别的build.gradle文件

buildscript 
    repositories 
        jcenter()
        maven  url 'https://maven.fabric.io/public' 
    

    dependencies 
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.google.gms:google-services:3.1.2'

        // We recommend changing it to the latest version from our changelog:
        // https://docs.fabric.io/android/changelog.html#fabric-gradle-plugin
        classpath 'io.fabric.tools:gradle:1.24.4'
    

DatabaseException 将发生在 FirebaseDatabase.class

public static synchronized FirebaseDatabase getInstance(FirebaseApp var0, String var1) 
        if(TextUtils.isEmpty(var1)) 
            throw new DatabaseException("Failed to get FirebaseDatabase instance: Specify DatabaseURL within FirebaseApp or from your getInstance() call.");
         else 
...

【问题讨论】:

我想知道FirebaseApp是否初始化成功。您能否尝试记录FirebaseApp.getInstance().getOptions().getDatabaseUrl() 返回的字符串以查看调用是否完成以及结果是否为空? @Bob Snyder getDatabaseUrl() 返回 null,但 getProjectId()、getApiKey() 和 getApplicationId() 返回正确值 您的google-services.json 文件是否具有firebase_url 属性?它将位于project_info 下的文件顶部附近。 尝试重新生成您的google-services.json。它的顶部应该有一个 project_info 对象,其中包含:project_numberfirebase_urlproject_idstorage_bucket 如果通过 FirebaseDatabase.getInstance("https://blahblah-dbf79-default-rtdb.firebaseio.com/"); 硬编码 db url 也可以工作。我遇到了这个问题,因为我首先复制了google-services.json,然后我添加了实时数据库,所以我的 json 没有更新,并且通过 db url 的硬编码来修复。但是有一次,我更新了 json,我删除了 db url 硬编码。 【参考方案1】:

如果有人在 2021 年遇到这个问题,那么只需按照以下步骤操作:- 在 build.gradle/app 中添加这些依赖项

  implementation platform('com.google.firebase:firebase-bom:26.3.0')
implementation 'com.google.firebase:firebase-database-ktx'

然后使用数据库引用对象

databaseReference=Firebase.database.getReference("Users")

还是一头雾水然后在这里阅读此文档1

【讨论】:

【参考方案2】:

我再次下载了google-services.json文件,因为我刚刚添加了实时数据库。

你的文件应该有

"project_info": 
    "project_number": "123456789",
    "firebase_url": "https://example.firebaseio.com",
    "project_id": "example",
    "storage_bucket": "example.appspot.com"
  , 
...

【讨论】:

【参考方案3】:

这是我为 ios 项目所做的。

在我下载了 GoogleService-Info.plist 文件并将其添加到我的项目后,我一直在崩溃

无法获取 FirebaseDatabase 实例:在其中指定 DatabaseURL FIRApp 或从您的数据库ForApp:URL: 调用。

在谷歌搜索并没有找到具体答案后,我查看了我拥有的另一个项目中的 GoogleService-info.plist 文件,DATABASE_URL 密钥在那里,但在崩溃的那个中丢失了

您只需 3 个简单的步骤:

1- 打开你的谷歌GoogleService-info.plist

2- 将DATABASE_URL 键重新输入到文件中

3- 转到您的 Firebase 控制台 > RealtimeDatabase > 复制并粘贴或从那里输入 https//... url string 作为 DATABASE_URL 文件中 DATABASE_URL 键的值

一定要加上https//:部分(从图片上可能看不出来)

【讨论】:

就我而言,我确实错过了 databaseURL 键值【参考方案4】:

您可以转到 Firebase 控制台: 1-选择您的项目。 2-从左侧菜单的“实时数据库”点击进入“数据”选项卡,在这里您可以轻松访问所需的数据库URL,您可以在第一行找到它,然后请使用以下代码行:

DatabaseReference mdatabaseref=FirebaseDatabase.getInstance().getReferenceFromUrl(url);.

一切就绪。 for example you can find the URL in this picture underlined by red

请看一下: Assign a firebase database url(String) to a Database Reference variable?

【讨论】:

【参考方案5】:

只需在 getInstance() 中添加您的 firebase url

FirebaseDatabase database = FirebaseDatabase.getInstance("YOUR FIREBASE URL HERE");

这对我有用。

【讨论】:

【参考方案6】:

升级 build.gradle(modular) 中实现包以下的版本。

dependencies 

    //noinspection GradleDependency
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'com.google.firebase:firebase-database:19.6.0'
    testImplementation 'junit:junit:4.13.1'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

【讨论】:

【参考方案7】:

在 Kotlin 中 从此处复制您的数据库网址,然后将此网址粘贴到您的代码中。

refUsers = FirebaseDatabase.getInstance("https://tictic-97910.firebaseio.com/").reference.child("Users").child(firebaseUserId)

【讨论】:

【参考方案8】:

在 AndroidManifest.xml 中将您的构建依赖项升级到 19.7.0

    implementation 'com.google.firebase:firebase-database:19.7.0'

Android Studio -> Tools -> Firebase 中的默认设置使用了导致此问题的旧版本。

【讨论】:

【参考方案9】:
<key>DATABASE_URL</key>
    <string>https://appName-bgbtty-default-bblebut.firebaseio.com</string>

转到 google 服务 作为源代码打开,然后将其插入到 google api id 下方(底部)

【讨论】:

【参考方案10】:

google-services.json "project_info": "firebase_url":""

【讨论】:

虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。【参考方案11】:

这是您的 Google p.list 的问题。启用 Firebase 数据库后,只需从 Firebase 仪表板/项目设置中重新下载即可。

【讨论】:

以上是关于未能获取 FirebaseDatabase 实例。在 FirebaseApp 中指定 DatabaseURL的主要内容,如果未能解决你的问题,请参考以下文章

未能获取默认 Firebase 数据库实例。必须调用`[FIRApp 配置]

无法将模块“fireBaseDatabase”加载为“FirebaseDatabase”

未能创建本机类型“NSObject”的实例

* 未能打开 vchiq 实例

AWS Opsworks 未能添加 EC2 实例

GCP Cloud SQL 未能删除实例,因为 `deletion_protection` 设置为 true