그래서 사용자들이 서로 통신 할 수있는 메시지 응용 프로그램을 만들었습니다. 나는 이것을하기 위해 파이어베이스를 사용하고있다. 이제 문제는 앱이 백그라운드에 있거나 닫혀있을 때 백그라운드에서 알림을 만들고 싶습니다. 읽지 않은 메시지에 대한 알림을받는 messenger/whatsapp와 유사합니다.내 채팅 응용 프로그램에 알림 SERVICE을 만드는 방법은 무엇입니까?
어떻게 만들 수 있습니까? 당신은 지금 그 응용 프로그램이 또는 더 쉽게 (구글 앱 엔진에서 예를 들어) 인스턴스를 제공 실행 중 필요가 클라이언트에 푸시 알림을 보내는
chat-room.java
public class Chat_Room extends AppCompatActivity{
private Button btn_send_msg;
private EditText input_msg;
private TextView chat_conversation;
private String user_name,room_name;
private DatabaseReference root ;
private DatabaseReference Mnotification;
private String temp_key;
NotificationCompat.Builder notification;
private static final int uniqueID = 1995;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chat_room);
btn_send_msg = (Button) findViewById(R.id.btn_send);
input_msg = (EditText) findViewById(R.id.msg_input);
chat_conversation = (TextView) findViewById(R.id.textView);
user_name = getIntent().getExtras().get("user_name").toString();
room_name = getIntent().getExtras().get("room_name").toString();
setTitle(" Room - "+room_name);
root = FirebaseDatabase.getInstance().getReference().child(room_name);
Mnotification = FirebaseDatabase.getInstance().getReference().child("notifications");
btn_send_msg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Map<String,Object> map = new HashMap<String, Object>();
temp_key = root.push().getKey();
root.updateChildren(map);
DatabaseReference message_root = root.child(temp_key);
Map<String,Object> map2 = new HashMap<String, Object>();
map2.put("name",user_name);
map2.put("msg",input_msg.getText().toString());
message_root.updateChildren(map2);
//not();
//test();
}
});
root.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
append_chat_conversation(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
append_chat_conversation(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
public void test() {
String tkn = FirebaseInstanceId.getInstance().getToken();
String text = chat_msg;
not();
Log.d("App", "Token[" + tkn + "]");
}
public void not(){
notification = new NotificationCompat.Builder(this);
notification.setAutoCancel(true);
notification.setSmallIcon(R.drawable.downloadfile);
notification.setTicker("This is the tocken");
notification.setWhen(System.currentTimeMillis());
notification.setContentTitle(user_name);
notification.setContentText(chat_msg);
Intent intent = new Intent(Chat_Room.this, Message.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
notification.setContentIntent(pendingIntent);
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
nm.notify(uniqueID, notification.build());
}
private String chat_msg,chat_user_name;
private void append_chat_conversation(DataSnapshot dataSnapshot) {
Iterator i = dataSnapshot.getChildren().iterator();
while (i.hasNext()){
chat_msg = (String) ((DataSnapshot)i.next()).getValue();
chat_user_name = (String) ((DataSnapshot)i.next()).getValue();
chat_conversation.append(chat_user_name +" : "+chat_msg +" \n");
input_msg.setText("");
test();
}
}
}
예를 들어 특정 부서의 사용자 목록이 포함 된 알림을 listview에 보내려면 해당 관리자가 3 개 부서를 담당하고 있으며이를 보내려한다고 가정 해 보겠습니다. 각 부서의 각 사용자 목록에 대한 알림 –
각 부서의 사용자 목록을 보유하고있는 한 위와 동일한 대답이됩니다. 토큰을 반복하여 알림을 보내면됩니다. 시나리오가 다른 경우 무엇인지 확실하지 않습니다. Firebase 콘솔을 통해서도 앱의 모든 사용자에게 알림을 보내거나 청크로 분류 할 수 있습니다. – TheeBen
예 장치를 사용하는 사람이 그 사람이 작성한 알림을 장치가 여러 장치 알림처럼 작동하는지 확실하지 않은 사용자에게 보내려합니다. –