Push-уведомление Firebase для приложения чата - PullRequest
0 голосов
/ 04 июня 2018

Я занимаюсь разработкой приложения для чата с использованием базы данных Firebase Realtime.Я был в состоянии отправлять и получать сообщения правильно.Теперь я хочу реализовать уведомление всякий раз, когда получено новое сообщение. То есть всякий раз, когда какой-либо пользователь отправляет сообщение, push-уведомление запускается на другом пользовательском устройстве, которое имеет такое приложение, как whatsapp.Моя главная задача - как выполнить эту часть в приведенном ниже коде?

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);
}

}

1 Ответ

0 голосов
/ 05 июня 2018

Вы можете легко отправлять уведомления с консоли Firebase. См. Документы: https://firebase.google.com/docs/cloud-messaging/

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

Но вы запрашиваете автоматическое уведомление, это немного сложно, ноВы можете сделать это с помощью

  1. Использование облачных функций Firebase.

    Видеоруководство: https://www.youtube.com/playlist?list=PLGCjwl1RrtcRHjHyZAxm_Mq4qvtnundo0

  2. Посредством почтового запроса к вашей пожарной базесервер,

Документы: https://firebase.google.com/docs/cloud-messaging/send-message

Как отправлять сообщения с устройства на устройство с помощью Firebase Cloud Messaging?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...