2016-10-20 32 views
0

步骤来复制我做什么:火力地堡和Android工作室,无法让过去:W/SyncTree:听在/消息失败:DatabaseError:权限被拒绝

步骤1)新项目实例名称:融为一体。 myapp.test

步骤2)火力控制台上新的Android应用程序,名称:com.myapp.test(就像在清单)

步骤3)下载谷歌,services.json和地点它在我的项目的'app'文件夹中

步骤4)添加下列行:

的build.gradle - 项目级别

classpath 'com.google.gms:google-services:3.0.0' 

的build.gradle - 应用级(在底部文件)

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

我也借此机会增加一对夫妇从火力地堡依赖我要去使用,如:

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 

回答

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!"); 
     } 
     } 
    }); 
+0

谢谢,我没有看到其他方式。在网页浏览器中使用JavaScript很好,而不必这样做,这就是我混淆的原因。 – Rosenberg

相关问题