我希望能够始终在用户之间检索消息,但是当我专门引用我在向后端添加新消息时创建的子节点时,我似乎只能这样做(子节点是“USER1PHONENUMBER:USER2PHONENUMBER” “并且两个用户都将数据写入同一子节点 . 这适用于当用户进入联系人列表并选择联系人时,因为我可以获得两个用户电话号码并知道要使用哪个子节点 . 我这样做了:
if (senderNumber > receiverNumber) {
Firebase ref = new Firebase(Passwords.FB_LINK).child("Message").child(username + ":" + binderContact.getNumber());
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot msg : dataSnapshot.getChildren()) {
Message message = msg.getValue(Message.class);
Log.d("TAG", "Message Received: " + message.getText());
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
else {
Firebase ref = new Firebase(Passwords.FB_LINK).child("Message").child(binderContact.getNumber() + ":" + username);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot msg : dataSnapshot.getChildren()) {
Message message = msg.getValue(Message.class);
Log.d("TAG", "Message Received: " + message.getText());
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
事情是,我希望以某种方式接收消息,我的用户在子节点上收到一条新消息,这会留下他们的电话号码,然后我可以存储它并将其显示在列表视图中,并附上联系方式,这样我就可以创建一个消息 . 用户手机随时收到新消息的通知 . 任何想法如何实现这一点?我现在真的没有任何想法 .
我有以下Messages类结构:
public class Message {
private String from;
private String to;
private String text;
private String time;
private String timeCreated;
private Boolean repeat;
private String weekdays;
public Message() {}
public Message(String from, String to, String text, String time, String timeCreated, Boolean repeat, String weekdays) {
this.from = from;
this.to = to;
this.text = text;
this.time = time;
this.timeCreated = timeCreated;
this.repeat = repeat;
this.weekdays = weekdays;
}
public String getFrom() {
return from;
}
public String getTo() {
return to;
}
public String getText() {
return text;
}
public String getTime() {
return time;
}
public String getTimeCreated() {
return timeCreated;
}
public Boolean getRepeat() {
return repeat;
}
public String getWeekdays() {
return weekdays;
}
}
这就是我将数据保存到firebase的方式以及它在firebase end上的样子(用户名=用户的phonenumber):
// Save message on backend
if (senderNumber > receiverNumber) {
Firebase ref = new Firebase(Passwords.FB_LINK).child("Message").child(username + ":" + binderContact.getNumber()).child(currentTimeStamp);
Message msg = new Message(username, binderContact.getNumber(), message, hour + ":" + minute, currentTimeStamp, repeat, "M, D, W");
ref.setValue(msg);
}
else {
Firebase ref = new Firebase(Passwords.FB_LINK).child("Message").child(binderContact.getNumber() + ":" + username).child(currentTimeStamp);
Message msg = new Message(username, binderContact.getNumber(), message, hour + ":" + minute, currentTimeStamp, repeat, "M, D, W");
ref.setValue(msg);
}
1 回答
这可能是答案的极简化;
所有用户都会观察有关childAdded事件的消息节点 .
添加新消息后,它将发送给所有客户端 .
客户端应用程序检查消息以确定'to_user_phone'是否是该客户端,如果是,则在列表中显示它 .
以上是概念性的,因为它不是最好的结构;你可以做这样的事情
然后每个用户可以观察他们自己的消息节点以获取传入消息
工作结构有许多不同的方法,因此您需要探索适合您情况的方法 .