![](/img/trans.png)
[英]Realtime database authentication: failed: DatabaseError: Permission denied
[英]Firebase & Android Studio, unable to get past: W/SyncTree: Listen at /message failed: DatabaseError: Permission denied
复制我所做的步骤:
步骤1)新建项目示例名称:com.myapp.test
步骤2)在Firebase控制台上新建Android应用,名称:com.myapp.test(与清单中一样)
第3步)下载google-services.json并将其放在我项目的“ app”文件夹中
步骤4)添加以下行:
Build.gradle- 项目级别
classpath 'com.google.gms:google-services:3.0.0'
Build.gradle- 应用程序级别 (在文件底部)
apply plugin: 'com.google.gms.google-services'
我还借此机会从我将要使用的Firebase中添加了一些依赖项,例如:
compile 'com.google.firebase:firebase-core:9.6.1'
compile 'com.google.firebase:firebase-database:9.6.1'
compile 'com.google.android.gms:play-services:9.6.1'
步骤5)主要活动(创建时)
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.setValue("Hello, World!");
步骤6)运行它并获得以下信息:
W/SyncTree: Listen at /message failed: DatabaseError: Permission denied
W/MainActivity: Failed to read value.
com.google.firebase.database.DatabaseException: Firebase Database error: Permission denied
at com.google.firebase.database.DatabaseError.toException(Unknown Source)
at com.myapp.test.MainActivity$1.onCancelled(MainActivity.java:50)
at com.google.android.gms.internal.zzajp.zza(Unknown Source)
at com.google.android.gms.internal.zzakn.zzcxi(Unknown Source)
at com.google.android.gms.internal.zzaks$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我尝试从头开始至少5次,使用不同的名称。 甚至添加指纹。 但是,无论我做什么,我都无法摆脱这个错误。
通过转到控制台上的“权限”选项卡并将“ auth!= null”更改为true,可以使其工作。 但这是一个创可贴,我需要一个永久的解决方案。
我的手被绑在这里,用尽了所有的尝试。 我确实收到以下消息,该消息可能与上面的错误有关,也可能与上面的错误无关:
I/InstantRun: Instant Run Runtime started. Android package is com.myapp.test, real application class is null.
并且:
W/DynamiteLoaderImpl: Failed to load module version: module com.google.android.gms.flags not found
唯一的永久解决方案是使用Firebase身份验证登录应用程序的用户。
最简单的方法是使用匿名身份验证登录,并仅在成功时才写入数据库:
mAuth.signInAnonymously()
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.setValue("Hello, World!");
}
}
});
写入数据库之前先进行身份验证,或者更改安全规则以允许未经身份验证的用户读取/写入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.