4

I am developing a chat app using Firebase Realtime Database. I have been able to send and receive messages properly. Now, I want to implement notification whenever new message is received.i.e whenever any user sends a message a push notification triggers at other user device who have that app just like whatsapp. My main concern is how to do that part in my given below code?

OnlineActivity.java

import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.text.format.DateFormat;
import android.widget.Toast;

import com.firebase.ui.auth.AuthUI;
import com.firebase.ui.database.FirebaseListAdapter;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import hani.momanii.supernova_emoji_library.Actions.EmojIconActions;
import hani.momanii.supernova_emoji_library.Helper.EmojiconEditText;
import hani.momanii.supernova_emoji_library.Helper.EmojiconTextView;

import static com.yef.youthempower.youth.R.layout.activity_online;

public class OnlineActivity extends AppCompatActivity {

private static int SIGN_IN_REQUEST_CODE = 1;
private FirebaseListAdapter<ChatMessage> adapter;
RelativeLayout activity_online;

//Add Emojicon
EmojiconEditText emojiconEditText;
ImageView emojiButton,submitButton;
EmojIconActions emojIconActions;





@Override
protected void onActivityResult(int requestCode, int resultCode, Intent 
data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == SIGN_IN_REQUEST_CODE)
    {
        if(resultCode == RESULT_OK)
        {
            Snackbar.make(activity_online, "Successfully signed 
 in.Welcome!", Snackbar.LENGTH_SHORT).show();
            displayChatMessage();
        }
        else{
            Snackbar.make(activity_online,"We couldn't sign you in.Please 
 try again later", Snackbar.LENGTH_SHORT).show();
            finish();
        }
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_online);
         activity_online=(RelativeLayout)findViewById(R.id.activity_online);

    if (getSupportActionBar() != null) {

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

    }
    emojiButton = (ImageView)findViewById(R.id.emoji_button);
    submitButton = (ImageView)findViewById(R.id.submit_button);
    emojiconEditText = 
(EmojiconEditText)findViewById(R.id.emojicon_edit_text);
    emojIconActions = new 
EmojIconActions(getApplicationContext(),
activity_online,emojiButton,emojiconEditText);
    emojIconActions.ShowEmojicon();

    submitButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            FirebaseDatabase.getInstance().getReference().push().setValue(new ChatMessage(emojiconEditText.getText().toString(),
                    FirebaseAuth.getInstance().getCurrentUser().getEmail()));
            emojiconEditText.setText("");
            emojiconEditText.requestFocus();
        }
    });

    //Check if not sign-in then navigate Signin page
    if(FirebaseAuth.getInstance().getCurrentUser() == null)
    {
        startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder().build(),SIGN_IN_REQUEST_CODE);
    }
    else
    {
        Snackbar.make(activity_online,"Welcome "+FirebaseAuth.getInstance().getCurrentUser().getEmail(),Snackbar.LENGTH_SHORT).show();
        //Load content
        displayChatMessage();
    }


}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home)
        finish();
    return super.onOptionsItemSelected(item);
}



private void displayChatMessage() {

    ListView listOfMessage = (ListView)findViewById(R.id.list_of_message);
    adapter = new FirebaseListAdapter<ChatMessage>(this,ChatMessage.class,R.layout.list_items,FirebaseDatabase.getInstance().getReference())
    {
        @Override
        protected void populateView(View v, ChatMessage model, int position) {

            //Get references to the views of list_items.xml
            TextView messageText, messageUser, messageTime;
            messageText = (EmojiconTextView) v.findViewById(R.id.message_text);
            messageUser = (TextView) v.findViewById(R.id.message_user);
            messageTime = (TextView) v.findViewById(R.id.message_time);

            messageText.setText(model.getMessageText());
            messageUser.setText(model.getMessageUser());
            messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)", model.getMessageTime()));

        }
    };
    listOfMessage.setAdapter(adapter);
}

}

Rajat Krishnan
  • 111
  • 2
  • 9

1 Answers1

0

You can easily send notifications from firebase console, Refer the docs : https://firebase.google.com/docs/cloud-messaging/

https://proandroiddev.com/mastering-firebase-notifications-36a3ffe57c41

But you are asking for sort of automatic notification, this is a bit tricky but you can do this by

  1. Using firebase cloud functions.

    Video tutorial : https://www.youtube.com/playlist?list=PLGCjwl1RrtcRHjHyZAxm_Mq4qvtnundo0

  2. By a post request to your firebase server,

Docs : https://firebase.google.com/docs/cloud-messaging/send-message

How to send device to device messages using Firebase Cloud Messaging?

Kashish Sharma
  • 749
  • 8
  • 18
  • with your given solutiin i can send notification but manually but i want that as my database is updated new notification is send autimatically just like whatsapp as new message arrives notificatiin is triggered. – Rajat Krishnan Jun 05 '18 at 12:28
  • That can be achieved using cloud functions or a post request from device to the server, please refer second point. Also it is explained very well in the video playlist. – Kashish Sharma Jun 05 '18 at 12:42
  • I appreciate your solution but this is something that i already know i.e sending push notification from device to device or to specific person i just wanted know that how the notification is sent automatically as the firebase database is updated for ex in whatsapp when a new chat is posted the notification is sent to all the member who are connected with that group – Rajat Krishnan Jun 05 '18 at 21:17
  • For that you have 2 cases – Kashish Sharma Jun 06 '18 at 06:59