Ich versuche, einen Chat-Raum in IOS mit Firebase einzurichten. Die Dinge funktionieren gut, wenn ich im Simulator der Firebase-Konsole teste, aber nicht in der IOS-App arbeite.Firebase - bekomme keine Nachricht mit gelesenen Regeln
Die Struktur ich benutze, ist wie diese
root/Mitglieder/Zimmer-id/auth.uid/userdata
root/Nachrichten/room_id/Nachrichten/Nachricht
ich ein neues Zimmer schaffen in IOS mit
- (void)initRoom
{
NSMutableDictionary *mdata = [[NSMutableDictionary alloc] init];
FIRUser *user = [FIRAuth auth].currentUser;
mdata[@"uid"] = user.uid;
// get the key for the new room
roomKey = [[_rootRef child:@"messages"] childByAutoId].key;
if (roomKey != nil) {
// add auth.uid to member/roomkey
NSString *memberID = [[[_rootRef child:@"members"] child: roomKey ] child: user.uid ].key;
[[[[_rootRef child:@"members"] child: roomKey ] child: memberID ] setValue:mdata];
[self addMemberToRoom];
}
}
und fügen Sie das andere Mitglied aus diesem Raum (hart codiert uid Verwendung bis jetzt):
-(void) addMemberToRoom{
NSString *memberID = [[[_rootRef child:@"members"] child: roomKey ] child: @"QLfRoGpoCjWpzira7fljBj8g3EJ3"].key;
NSMutableDictionary *mdata = [[NSMutableDictionary alloc] init];
mdata[@"uid"] = @"QLfRoGpoCjWpzira7fljBj8g3EJ3";
if (memberID !=nil) {
[[[[_rootRef child:@"members"] child: roomKey ] child: memberID ] setValue:mdata];
}
// start listener
[self observeMessages];
}
Die Show Konsole dies für die Mitglieder: und dies für Nachrichten:
und starten Sie den Hörer wie folgt aus:
-(void)observeMessages
{
_msgHandle = [[[_rootRef child:@"messages"] child: roomKey] observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) {
NSDictionary<NSString *, NSString *> *message = snapshot.value;
NSString *name = message[@"senderId"];
NSString *text = message[@"message"];
[self addMessagewithId:name andText:text];
// animates the receiving of a new message on the view
[self finishReceivingMessage];
}];
}
Das ist alles gut eine Nachricht hinzuzufügen, zu arbeiten die Datenbank und sehe es in der App, wenn ich Regeln wie folgt einstelle:
{
"rules": {
"members": {
".read": "auth !== null",
".write": "auth !== null",
},
"messages": {
".write":"auth !== null",
".read": "auth !== null",
"$room_id": {
}
}
}
}
Jetzt
, da will ich nicht jeder in der Lage sein, die Nachrichten zu lesen ich die Regel auf:
{
"rules": {
"members": {
".read": "auth !== null",
".write": "auth !== null",
},
"messages": {
".write": "auth !== null",
"$room_id": {
".read": "root.child('members/'+$room_id+'/'+auth.uid).exists()",
}
}
}
}
Wenn ich das tut, der Hörer in der IOS App wird keinen Anruf erhalten. Beim Überprüfen der room_id und des Benutzers, die mit dem Simulator in der Firebase-Konsole aus der App erstellt wurden, wird der Lesevorgang als OK markiert.
Meine Annahme war, dass der Listener initialisiert wurde, bevor die neuen Mitglieder erstellt wurden, aber sogar die Initialisierung zu verzögern hat nicht geholfen.
Können Sie mir helfen, indem Sie mich auf die richtige Richtung zeigen? Danke vielmals!