复制我所做的事情的步骤:
步骤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 I添加一些依赖项,例如:
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'为真。但那是一个绑带,我需要一个永久的解决方案。
我的手有点束缚在这里,跑出来试试。我收到以下消息,这些消息可能与上述错误有关,也可能没有:
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
答案 0 :(得分:1)
唯一永久的解决方案是使用Firebase身份验证登录应用用户。
最简单的方法是sign in with anonymous authentication,只有在成功时写入数据库:
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!");
}
}
});
答案 1 :(得分:1)
在写入数据库之前进行身份验证或更改安全规则以允许未经过身份验证的用户进行读/写。