Android Studio 应用程序关闭时未检索FCM通知

rryofs0p  于 2023-02-05  发布在  Android
关注(0)|答案(1)|浏览(162)

我正在检索通知从firebase云消息到我的android应用程序。但问题是当我的应用程序打开或处于运行状态时,在这种情况下,只有我的应用程序正在检索通知。如果我不使用我的应用程序或我的应用程序没有打开,我发送任何推送通知,通知不在我的应用程序内检索。

@Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);

        mFirestore = FirebaseFirestore.getInstance();

        if (remoteMessage.getData() != null) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
                sendNotificationAPI26(remoteMessage);

            else
                sendNotification(remoteMessage);
        }
    }

    private void sendNotification(RemoteMessage remoteMessage) {

        isNotificationMatching = false;
        Intent intent = new Intent(this, Dashboard.class);
        intent.putExtra("notificationFragment", "showNotifications");
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

        final Map<String, String> data = remoteMessage.getData();

        String title = data.get("title");
        String description = data.get("description");
        String url = data.get("url");
        String code = data.get("code");
        String actual_price = data.get("actual_price");
        String deal_price = data.get("deal_price");
        String key = data.get("key");
        final String id = data.get("id");

        mFirestore.collection("notifications").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        if (document.getData().get("id").equals(id)) {
                            isNotificationMatching = true;
                            break;
                        }
                    }

                    if (!isNotificationMatching) {
                        postDataToFirebaseServer(data);
                    }

                } else {
                    Log.d(TAG, "Error getting documents: ", task.getException());
                }
            }
        });

        Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.app_logo)
                .setContentText(title)
                .setAutoCancel(true)
                .setSound(defaultSoundUri);
        builder.setContentIntent(pendingIntent);

        NotificationManager noti = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        noti.notify(new Random().nextInt(), builder.build());
    }

    private void postDataToFirebaseServer(Map<String, String> data) {

        Map<String,Object> postDataMap = new HashMap<>();
        postDataMap.put("title", data.get("title"));
        postDataMap.put("description", data.get("description"));
        postDataMap.put("url", data.get("url"));
        postDataMap.put("id", data.get("id"));
        postDataMap.put("code", data.get("code"));
        postDataMap.put("actual_price", data.get("actual_price"));
        postDataMap.put("deal_price", data.get("deal_price"));
        postDataMap.put("key", data.get("key"));

        postDataMap.put("timestamp", FieldValue.serverTimestamp());

        mFirestore.collection("notifications").add(postDataMap).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
            @Override
            public void onSuccess(DocumentReference documentReference) {
//                Toast.makeText(getA.this, "Success", Toast.LENGTH_SHORT);
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                String error = e.getMessage();
//                Toast.makeText(Testing.this, "Failed", Toast.LENGTH_SHORT);
            }
        });

    }

    private void sendNotificationAPI26(RemoteMessage remoteMessage) {
        Intent intent = new Intent(this, Dashboard.class);
        intent.putExtra("notificationFragment", "showNotifications");
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

        final Map<String, String> data = remoteMessage.getData();

        String title = data.get("title");
        String description = data.get("description");
        String url = data.get("url");
        String code = data.get("code");
        String actual_price = data.get("actual_price");
        String deal_price = data.get("deal_price");
        String key = data.get("key");
        final String id = data.get("id");

        mFirestore.collection("notifications").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        if (document.getData().get("id").equals(id)) {
                            isNotificationMatching = true;
                            break;
                        }
                    }

                    if (!isNotificationMatching) {
                        postDataToFirebaseServer(data);
                    }

                } else {
                    Log.d(TAG, "Error getting documents: ", task.getException());
                }
            }
        });

        NotificationHelper helper;
        Notification.Builder builder;

        Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        helper = new NotificationHelper(this);
        builder = helper.getLootBoxNotification(title, description, url, id, code, actual_price, deal_price, key, defaultSoundUri);
        helper.getManager().notify(new Random().nextInt(), builder.build());
        builder.setContentIntent(pendingIntent);

    }
}

我想当我的应用程序关闭或不在运行状态时,任何推送通知发送,也将检索应用程序内。

tcbh2hod

tcbh2hod1#

尝试从有效负载中删除“通知”密钥,并仅提供“数据”密钥。

正文/负载/JSON请求:

{
    "collapse_key": "type_a",
    "notification": {
        "badge": "2",
        "module": "announcements",
    "action": "announcementAddedByWarden",
    "id": "2455",
    "title": "Test Notification",
    "body": "Check Notification"
},
"data": {
    "badge": "2",
    "module": "Announcement",
    "id": "2455",
    "title": "Test Notification",
    "body": "Check Notification"
},
"registration_ids": [
    "dJokCoAJRfyHpL3y9rQWxL:APA91bGNszapf1bnQapVHW1CMLT14SXMmjYBmXooRUiiMEWpvawkZ9Kv5SzRz4cnqHhnwFGWT3uXfzgGn3ygysJE1bkfG0nNomCtL_ikDzE0TiP0TZjhQBDSj_1ydFUyrnQKNSnszqgW",
    "dAdFOnor6FE:APA91bHM2FiBf3nfuqcQixr5syVnUcICI8bnA0rxAp1noFLfU9DozGSyJl2jK2wf0EQfIuywA6_1b0_CUmZQoFq1Nhuuz2-bH3uO6MqZ-kfog8TD8USZTUb3MHeK1z6Mtx7RQNAi3UZP"
 ]
}

您可以从有效负载中删除数据对象,如以下代码片段所示:

"data": {
    "badge": "2",
    "module": "Announcement",
    "id": "2455",
    "title": "Test Notification",
    "body": "Check Notification"
},

正确格式为:

{
"collapse_key": "type_a",
"notification": {
    "badge": "2",
    "module": "announcements",
    "action": "announcementAddedByWarden",
    "id": "2455",
    "title": "Test Notification",
    "body": "Check Notification"
},
"registration_ids": [
    "dJokCoAJRfyHpL3y9rQWxL:APA91bGNszapf1bnQapVHW1CMLT14SXMmjYBmXooRUiiMEWpvawkZ9Kv5SzRz4cnqHhnwFGWT3uXfzgGn3ygysJE1bkfG0nNomCtL_ikDzE0TiP0TZjhQBDSj_1ydFUyrnQKNSnszqgW",
    "dAdFOnor6FE:APA91bHM2FiBf3nfuqcQixr5syVnUcICI8bnA0rxAp1noFLfU9DozGSyJl2jK2wf0EQfIuywA6_1b0_CUmZQoFq1Nhuuz2-bH3uO6MqZ-kfog8TD8USZTUb3MHeK1z6Mtx7RQNAi3UZP"
  ]
}

相关问题