Android Firebase中无服务器端编码的应用内通知

Android Firebase中无服务器端编码的应用内通知,android,firebase-realtime-database,chat,firebase-notifications,Android,Firebase Realtime Database,Chat,Firebase Notifications,我正在开发一个电子商务android应用程序,其中我有两个方面(管理方面和用户方面)。我已经在我的应用程序中实现了应用程序内消息传递,其中用户可以向管理员发送消息,管理员可以向用户发送消息。现在,我想在这一部分中添加通知,当管理员或用户发送消息时,另一方收到通知(如果它在应用程序中),因为我想在不使用服务器端代码的情况下执行此操作。我试着用谷歌搜索,但找不到任何好的解决办法。有人能帮忙吗? 以下是我为用户提供的聊天类: chat_messages_view_panel = (LinearLayo

我正在开发一个电子商务android应用程序,其中我有两个方面(管理方面和用户方面)。我已经在我的应用程序中实现了应用程序内消息传递,其中用户可以向管理员发送消息,管理员可以向用户发送消息。现在,我想在这一部分中添加通知,当管理员或用户发送消息时,另一方收到通知(如果它在应用程序中),因为我想在不使用服务器端代码的情况下执行此操作。我试着用谷歌搜索,但找不到任何好的解决办法。有人能帮忙吗? 以下是我为用户提供的聊天类:

chat_messages_view_panel = (LinearLayout)findViewById(R.id.chat_messages_view_panel);
    chat_messages_scroll_view = (ScrollView)findViewById(R.id.chat_messages_scroll_view);

    chatImagesRef = FirebaseStorage.getInstance().getReference().child("Chat Images");


    FirebaseDatabase.getInstance().getReference().child("Admins").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for(DataSnapshot item : snapshot.getChildren()) {
                admin = item.getValue(Admin.class);
                break;
            }
            loadMessages();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });

    FirebaseDatabase.getInstance().getReference().child("Messages").child(Prevelent.onlineUser.getEmail()).
            addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot)
                {
                    for(DataSnapshot item: snapshot.getChildren())
                    {
                        Message message = item.getValue(Message.class);
                        if(!message_ids.contains(message.getId()))
                        {
                            message_ids.add(message.getId());
                            addMessage(message);
                        }
                    }
                }
                @Override
                public void onCancelled(@NonNull DatabaseError error) {

                }
            });

    sendButton = (ImageButton)findViewById(R.id.sendMessage);
    messageContent = (EditText)findViewById(R.id.chat_message_box);
    sendPictureButton = (ImageButton) findViewById(R.id.uploadImage);
    loadingBar = new ProgressDialog(this);


    sendButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(messageContent.getText().toString().equals("")){
                return;
            }

            Calendar calendar = Calendar.getInstance();

            SimpleDateFormat currentDate = new SimpleDateFormat("yyyy MM, dd");
            String saveCurrentDate = currentDate.format(calendar.getTime());

            SimpleDateFormat currentTime = new SimpleDateFormat("HH:mm:ss:SSS a");
            String saveCurrentTime = currentTime.format(calendar.getTime());

            DatabaseReference messageRef = FirebaseDatabase.getInstance().getReference();

            Map<String, Object> userdataMap = new HashMap<>();
            userdataMap.put("id", Prevelent.onlineUser.getEmail() + " : " + saveCurrentDate + " " + saveCurrentTime);
            userdataMap.put("content", messageContent.getText() + "");
            userdataMap.put("sentByEmail", Prevelent.onlineUser.getEmail());
            userdataMap.put("sentByName", Prevelent.onlineUser.getName());
            userdataMap.put("sentToEmail", admin.getEmail());
            userdataMap.put("sentToName", admin.getName());
            userdataMap.put("sentAt", saveCurrentDate + " " + saveCurrentTime);
            userdataMap.put("messageType", "text");
            messageRef.child("Messages").child(Prevelent.onlineUser.getEmail()).child(saveCurrentDate + " " + saveCurrentTime).
                    updateChildren(userdataMap)
                    .addOnCompleteListener(new OnCompleteListener<Void>(){
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            messageContent.setText("");
                        }
                    });
        }
    });

    sendPictureButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            OpenGallery();
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode==GalleryPick  &&  resultCode==RESULT_OK  &&  data!=null)
    {
        ImageUri = data.getData();
        AlertDialog.Builder alertadd = new AlertDialog.Builder(chatActivity.this);
        LayoutInflater factory = LayoutInflater.from(chatActivity.this);
        final View view = factory.inflate(R.layout.alertdialog_imageview_layout, null);
        ImageView imageView = view.findViewById(R.id.dialog_imageview);
        imageView.setImageURI(ImageUri);
        alertadd.setView(view);
        alertadd.setCancelable(false);
        alertadd.setPositiveButton("Upload", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dlg, int sumthin) {
                loadingBar.setTitle("Picture Upload");
                loadingBar.setMessage("Please wait while your image is being uploaded");
                loadingBar.setCanceledOnTouchOutside(false);
                loadingBar.show();
                UploadImage();
                dlg.dismiss();
            }
        });
        alertadd.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dlg, int sumthin) {
                dlg.dismiss();
            }
        });
        alertadd.show();
    }
}

public void UploadImage(){
    Calendar calendar = Calendar.getInstance();

    SimpleDateFormat currentDate = new SimpleDateFormat("yyyy MM, dd");
    saveCurrentDate = currentDate.format(calendar.getTime());

    SimpleDateFormat currentTime = new SimpleDateFormat("HH:mm:ss:SSS a");
    saveCurrentTime = currentTime.format(calendar.getTime());

    pictureRandomKey = saveCurrentDate + saveCurrentTime;

    final StorageReference filePath = chatImagesRef.child(ImageUri.getLastPathSegment() + pictureRandomKey + ".jpg");

    final UploadTask uploadTask = filePath.putFile(ImageUri);

    uploadTask.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e)
        {
            String message = e.toString();
            Toast.makeText(chatActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show();
        }
    }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot)
        {
            loadingBar.cancel();
            Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                @Override
                public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception
                {
                    if (!task.isSuccessful())
                    {
                        throw task.getException();
                    }

                    downloadImageUrl = filePath.getDownloadUrl().toString();
                    return filePath.getDownloadUrl();
                }
            }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                @Override
                public void onComplete(@NonNull Task<Uri> task)
                {
                    if (task.isSuccessful())
                    {
                        downloadImageUrl = task.getResult().toString();

                        DatabaseReference messageRef = FirebaseDatabase.getInstance().getReference();

                        Map<String, Object> userdataMap = new HashMap<>();
                        userdataMap.put("id", Prevelent.onlineUser.getEmail() + " : " + saveCurrentDate + " " + saveCurrentTime);
                        userdataMap.put("content", downloadImageUrl);
                        userdataMap.put("sentByEmail", Prevelent.onlineUser.getEmail());
                        userdataMap.put("sentByName", Prevelent.onlineUser.getName());
                        userdataMap.put("sentToEmail", admin.getEmail());
                        userdataMap.put("sentToName", admin.getName());
                        userdataMap.put("sentAt", saveCurrentDate + " " + saveCurrentTime);
                        userdataMap.put("messageType", "picture");
                        messageRef.child("Messages").child(Prevelent.onlineUser.getEmail()).child(saveCurrentDate + " " + saveCurrentTime).
                                updateChildren(userdataMap)
                                .addOnCompleteListener(new OnCompleteListener<Void>(){
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {
                                        messageContent.setText("");
                                    }
                                });
                    }
                }
            });
        }
    });
}

private void addMessage(Message message)
{
    if(message.getMessageType().equals("text")){
        if(message.getSentByEmail().equals(Prevelent.onlineUser.getEmail()))
        {
            addMyMessage(message);
        }
        else
        {
            addTheirMessage(message);
        }
    }else{
        int id = View.generateViewId();
        imagesUrl.put(id, message.getContent());
        if(message.getSentByEmail().equals(Prevelent.onlineUser.getEmail()))
        {
            addMyMessageImage(message, id);
        }
        else
        {
            addTheirMessageImage(message, id);
        }
    }
}

private void addTheirMessageImage(Message message, int id) {

    try {
        View v = LayoutInflater.from(chatActivity.this).inflate(R.layout.their_message_image, null);
        TextView sender_name_view = v.findViewById(R.id.sender_name_view);
        ImageView imageView = v.findViewById(R.id.receivedImageView);
        TextView message_time = v.findViewById(R.id.received_message_box_time);

        sender_name_view.setText(message.getSentByName());
        Picasso.get().load(message.getContent()).into(imageView);
        message_time.setText(getMomentAgo(message.getSentAt()));

        imageView.setId(id);

        chat_messages_view_panel.addView(v);
        scrollChatToBottom();

    }catch (Exception ignored)
    {

    }
}

private void addMyMessageImage(Message message, int id) {

    try {
        View v = LayoutInflater.from(chatActivity.this).inflate(R.layout.my_message_image, null);
        ImageView imageView = v.findViewById(R.id.sentImageView);
        TextView message_time = v.findViewById(R.id.sent_message_box_time);


        Picasso.get().load(message.getContent()).into(imageView);
        message_time.setText(getMomentAgo(message.getSentAt()));

        imageView.setId(id);

        chat_messages_view_panel.addView(v);
        scrollChatToBottom();

    }catch (Exception ignored)
    {

    }
}

private void addTheirMessage(Message message)
{
    try {
        View v = LayoutInflater.from(chatActivity.this).inflate(R.layout.their_message, null);
        TextView sender_name_view = v.findViewById(R.id.sender_name_view);
        TextView message_view = v.findViewById(R.id.sender_message_body);
        TextView message_time = v.findViewById(R.id.received_message_box_time);

        sender_name_view.setText(message.getSentByName());
        message_view.setText(message.getContent());
        message_time.setText(getMomentAgo(message.getSentAt()));

        chat_messages_view_panel.addView(v);
        scrollChatToBottom();

    }catch (Exception ignored)
    {

    }
}

private void addMyMessage(Message message)
{
    try {
        View v = LayoutInflater.from(chatActivity.this).inflate(R.layout.my_message, null);
        TextView message_view = v.findViewById(R.id.my_message_body);
        TextView message_time = v.findViewById(R.id.sent_message_box_time);
        message_view.setText(message.getContent());
        message_time.setText(getMomentAgo(message.getSentAt()));

        chat_messages_view_panel.addView(v);
        scrollChatToBottom();

    }catch (Exception ignored)
    {

    }
}

public void scrollChatToBottom() {
    chat_messages_scroll_view.post(new Runnable() {
        @Override
        public void run() {
            chat_messages_scroll_view.fullScroll(ScrollView.FOCUS_DOWN);
        }
    });
}

private void OpenGallery()
{
    Intent galleryIntent = new Intent();
    galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
    galleryIntent.setType("image/*");
    startActivityForResult(galleryIntent, GalleryPick);
}

@SuppressLint("SimpleDateFormat")
public String getMomentAgo(String date_time){
    try{
        SimpleDateFormat sourceFormat = new SimpleDateFormat("yyyy MM, dd HH:mm:ss:SSS a");
        SimpleDateFormat destFormat = new SimpleDateFormat("dd MMM, HH:mm a");
        Date convertedDate = sourceFormat.parse(date_time);
        if (convertedDate != null) {
            return destFormat.format(convertedDate);
        }
    }catch (Exception ignored){}
    return "";
}

public void imageClick(View view)
{
    Dialog builder = new Dialog(this);
    builder.requestWindowFeature(Window.FEATURE_NO_TITLE);
    builder.getWindow().setBackgroundDrawable(
            new ColorDrawable(android.graphics.Color.TRANSPARENT));
    builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialogInterface) {
            //nothing;
        }
    });

    ImageView imageView = new ImageView(this);
    Picasso.get().load(imagesUrl.get(view.getId())).into(imageView);
    builder.addContentView(imageView, new RelativeLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT));
    builder.show();
}

public void loadMessages(){
    FirebaseDatabase.getInstance().getReference().child("Messages").child(Prevelent.onlineUser.getEmail()).
            addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot)
                {
                    for(DataSnapshot item: snapshot.getChildren())
                    {
                        Message message = item.getValue(Message.class);
                        if(!message_ids.contains(message.getId()))
                        {
                            message_ids.add(message.getId());
                            addMessage(message);
                        }
                    }
                }
                @Override
                public void onCancelled(@NonNull DatabaseError error) {

                }
            });
}
chat_messages_view_panel=(LinearLayout)findviewbyd(R.id.chat_messages_view_panel);
chat\u messages\u scroll\u view=(ScrollView)findViewById(R.id.chat\u messages\u scroll\u view);
chatImagesRef=FirebaseStorage.getInstance().getReference().child(“聊天图像”);
FirebaseDatabase.getInstance().getReference().child(“管理员”).addValueEventListener(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
对于(DataSnapshot项:snapshot.getChildren()){
admin=item.getValue(admin.class);
打破
}
loadMessages();
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
FirebaseDatabase.getInstance().getReference().child(“消息”).child(Prevelent.onlineUser.getEmail())。
addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot)
{
对于(DataSnapshot项:snapshot.getChildren())
{
Message Message=item.getValue(Message.class);
如果(!message_id.contains(message.getId()))
{
message_id.add(message.getId());
添加消息(message);
}
}
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
sendButton=(ImageButton)findViewById(R.id.sendMessage);
messageContent=(EditText)findViewById(R.id.chat\u message\u框);
sendPictureButton=(ImageButton)findViewById(R.id.uploadImage);
loadingBar=新建进度对话框(此对话框);
sendButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(messageContent.getText().toString().equals(“”){
返回;
}
日历=Calendar.getInstance();
SimpleDataFormat currentDate=新的SimpleDataFormat(“yyyy-MM,dd”);
字符串saveCurrentDate=currentDate.format(calendar.getTime());
SimpleDataFormat currentTime=新的SimpleDataFormat(“HH:mm:ss:SSS a”);
字符串saveCurrentTime=currentTime.format(calendar.getTime());
DatabaseReference messageRef=FirebaseDatabase.getInstance().getReference();
Map userdataMap=newhashmap();
userdataMap.put(“id”,Prevelent.onlineUser.getEmail()+”:“+saveCurrentDate+”+saveCurrentTime);
userdataMap.put(“content”,messageContent.getText()+”);
userdataMap.put(“sentByEmail”,Prevelent.onlineUser.getEmail());
userdataMap.put(“sentByName”,Prevelent.onlineUser.getName());
userdataMap.put(“sentToEmail”,admin.getEmail());
userdataMap.put(“sentToName”,admin.getName());
userdataMap.put(“sentAt”,saveCurrentDate+“”+saveCurrentTime);
userdataMap.put(“messageType”、“text”);
messageRef.child(“消息”).child(Prevelent.onlineUser.getEmail()).child(saveCurrentDate+“”+saveCurrentTime)。
updateChildren(userdataMap)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
messageContent.setText(“”);
}
});
}
});
sendPictureButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
OpenGallery();
}
});
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据)
{
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==GalleryPick&&resultCode==RESULT\u OK&&data!=null)
{
ImageUri=data.getData();
AlertDialog.Builder alertadd=新建AlertDialog.Builder(chatActivity.this);
LayoutFlater工厂=LayoutFlater.from(chatActivity.this);
最终视图=工厂充气(R.layout.alertdialog\u imageview\u layout,null);
ImageView ImageView=view.findViewById(R.id.dialog\u ImageView);
setImageURI(ImageUri);
alertadd.setView(视图);
alertadd.setCancelable(假);
alertadd.setPositiveButton(“上载”,新的DialogInterface.OnClickListener(){
公共void onClick(DialogInterface dlg,int sumthin){
loadingBar.setTitle(“图片上传”);
loadingBar.setMessage(“正在上载图像,请稍候”);
加载条。设置为取消到外部(false);
loadingBar.show();
上传图像();
dlg.discouse();
}
});
alertadd.setNegativeButton(“取消”,新建DialogInterface.OnClickListener(){
公共void onClick(DialogInterface dlg,int sumthin){
dlg.discouse();
}
});
alertadd.show();
}
}
public void UploadImage(){
日历=Calendar.getInstance();
SimpleDataFormat currentDate=新的SimpleDataFormat(“yyyy-MM,dd”);
萨维科伦