2016-10-31 42 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。我想我沒有...我在編程應用程序方面有點新。你能解釋一下我的App Server是什麼嗎? –

+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'是一個整數,如果你想以後編輯的通知,您可以使用,它可以是任意整數,只要它是有點獨特,使其他應用程序不小心編輯。 –

相關問題