Je ne parviens pas à écrire dans ma base de données Firebase dans mon simple Android. J'ai défini mes règles de base de données sur public):
{
"rules": {
".read": true,
".write": true
}
}
Créé une classe simple Message
:
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
public class Message {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference dbRef = database.getReference();
public String sender;
public String message;
public Message(){}
public Message(String sender, String message) {
this.sender = sender;
this.message = message;
}
}
Et définissez un bouton pour exécuter la méthode onClick writeNewMessage
, ces lignes constituant du code:
int counter = 0;
public void writeNewMessage(View view) {
counter += 1;
Message messageToWrite = new Message("John", "Simple message: " + counter);
String messageId = String.valueOf(counter);
dbRef.child("users").child(messageId).setValue(messageToWrite);
}
En cours d'exécution, je reçois le message d'erreur:
W/RepoOperation: setValue at /users/1 failed: DatabaseError: Permission denied
Je sais que cette question semble simple et susceptible d'avoir été répétée, mais je n'ai pas encore trouvé de personne qui pose ce problème sans que son erreur soit impliquée dans l'authentification ou dans un autre composant. La simplicité du problème est ce qui me trouble le plus.
EDIT: J'ai aussi trouvé cette erreur:
Failed to load module descriptor class: Didn't find class "com.google.Android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor"
Cela ressemble à un problème avec votre google-services.json.
Assurez-vous que le nom de l'application et l'ID client sont les mêmes que dans la console Firebase.
Si vous avez un doute, téléchargez à nouveau google-services.json à partir de la console de votre projet et ajoutez-le à votre projet.
Solution complète 1). Tout d'abord, allez dans l'onglet Authentification et sélectionnez SIGN-IN-METHOD activer Anonymous On 2). Deuxièmement, allez à l'onglet Base de données et écrivez la règle { "rules": { ".read": true, ".write": true }}
3). Troisièmement, allez dans l'onglet Stockage et écrivez la règle suivante
service firebase.storage {
match /b/myapplicationname-f2266.appspot.com/o {
match /{allPaths=**} {
allow read, write;
}}}
Note Cette solution est uniquement à des fins de test. La procédure suivante vous permet de donner une autorisation publique de lire et écrire votre base de données.
Je ne suis pas tout à fait sûr du problème, mais je viens de supprimer mon projet de Firebase et de le recréer, en supprimant et en installant le nouveau fichier google-services.json, qui a parfaitement fonctionné la deuxième fois.
Heureusement, il s'agit d'une application de test et ma base de données était vide, mais si vous vous trouvez dans cette situation et que des informations précieuses sont stockées dans votre compte, je vous recommande de l'exporter avant d'essayer cette solution.