2016-10-31 3 views
1

Я пытаюсь сделать приложение для обмена мгновенными сообщениями (не чат-приложение вроде WhatsApp, у меня есть один издатель и множество подписчиков).Как уведомить пользователя через базу данных Firebase?

Я хочу, чтобы оно отправило уведомление, когда я получаю новое сообщение.

Вот мой код (с ошибками):

mRef.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     for (DataSnapshot postSnapshot : dataSnapshot.getChildren()){ 
      Message message = postSnapshot.getValue(Message.class); 
      messages.add(0, message.getTitle() + '\n' + message.getMessage(), NotificationCompat.Builder mBuilder = //cannot resolve symbol 'mBuilder' 
        new NotificationCompat.Builder(this) //builder (android.content.Context) in Builder cannot be applied to (anonymous com.firebase.client.ChildEventListener) 
          .setSmallIcon(R.drawable.logo_he_digita_homepage) 
          .setContentTitle(message.getTitle()) 
          .setContentText(message.getMessage()); //')' expected 
        Intent resultIntent = new Intent(this, updates.class); //Cannot resolve constructor 'Intent(anonymous com.firebase.client.ChildEventListener, java.lang.Class<com.inbar.amit.ksharet>)' 
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); //create (android.content.Context) in TaskStackBuilder cannot be applied to (anonymous com.firebase.client.ChildEventListener) 
        stackBuilder.addParentStack(updates.class); 
        stackBuilder.addNextIntent(resultIntent); 
        PendingIntent resultPendingIntent = 
          stackBuilder.getPendingIntent(
          0, 
          PendingIntent.FLAG_UPDATE_CURRENT 
        ); 
        mBuilder.setContentIntent(resultPendingIntent); 
        NotificationManager mNotificationManager = 
          (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
        mNotificationManager.notify(124453245, mBuilder.build());); 

     } 
      adapter.notifyDataSetChanged(); 

     } 

Я использую Android Studio.

Спасибо за ответы.

+0

У вас есть код для клиентского приложения, но у вас есть Сервер приложений? –

+0

@AL. Я думаю, что у меня нет ... Я немного новичок в программировании приложений. Можете ли вы объяснить мне, что такое сервер приложений? –

+0

Вы используете Firebase, который является сервером приложений. –

ответ

0

Прежде всего обратите внимание, что для каждого дочернего элемента, уже находящегося в базе данных, будет вызываться onChildAdded, и каждый ребенок добавляется после начала прослушивания, поэтому вы получите уведомление для каждого сообщения в своей базе данных.

UPDATE

Так что вам нужно создать новую функцию для этого кода, потому что он не работает в классе слушателя. Вот код, который должен работать для вас:

mRef.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
    for (DataSnapshot postSnapshot : dataSnapshot.getChildren()){ 
     Message message = postSnapshot.getValue(Message.class); 
     messages.add(0, message.getTitle() + '\n' + message.getMessage()); 
     sendNotification(message); 

    } 
     adapter.notifyDataSetChanged(); 

    } 

Вне других методов, добавить этот метод:

public void sendNotification(Message message) { 
    NotificationCompat.Builder mBuilder = 
     new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.logo_he_digita_homepage) 
      .setContentTitle(message.getTitle()) 
      .setContentText(message.getMessage()); 
     Intent resultIntent = new Intent(this, updates.class); 
     TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
     stackBuilder.addParentStack(updates.class); 
     stackBuilder.addNextIntent(resultIntent); 
     PendingIntent resultPendingIntent = 
      stackBuilder.getPendingIntent(
       0, 
       PendingIntent.FLAG_UPDATE_CURRENT); 
     mBuilder.setContentIntent(resultPendingIntent); 
     NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.notify(124453245, mBuilder.build()); 

} 
+0

У меня нет функции с именем Add() в моем сообщении (вы имели в виду messages.add ?, потому что она добавляет элемент в массив. Что такое ResultActivity.class? Что мне помещать в mId? –

+0

Да, я имел в виду 'messages.add()' –

+0

ResultActivity.class - класс, который вы хотите, чтобы он открывался при прослушивании вашего уведомления. 'MId' - это целое число, которое вы можете использовать, если хотите позже отредактировать уведомление. будь то целое число, если оно несколько уникально, так что другое приложение не случайно его редактирует. –

Смежные вопросы