繁体   English   中英

Android - Firebase 通知在点击时打开一个活动

[英]Android - Firebase Notification open an Activity when clicked

我正在尝试打开应用程序并在单击推送通知时显示通知数据。 到目前为止,我拥有的代码正在工作,唯一的问题是当我有两个或更多通知时,应用程序只显示一个(收到的最新通知),而不是在通知视图中显示所有单个通知。 此外,如果我收到更多通知并单击它,应用程序将始终加载收到的第一个数据值。

我应该如何正确设置它以便获得收到的所有通知的列表,并且当单击其中一个将加载正确的数据时?

private void sendNotification(String image, String title, String subtitle, String content, String url, String time, String category) {
        //RemoteMessage.Notification notification = remoteMessage.getNotification();
        Intent intent = null;
        PendingIntent pendingIntent;
        if (url.equals("")) { // Simply run your activity
            intent = new Intent(this, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        } else { // open a page
            if (!url.equals("")) {
                intent = new Intent(this, NewsNotificationActivity.class);
                intent.putExtra("image", image);
                intent.putExtra("title", title);
                intent.putExtra("subtitle", subtitle);
                intent.putExtra("content", content);
                intent.putExtra("url", url);
                intent.putExtra("time", time);
                intent.putExtra("category", category);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            }
        }
        pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
                PendingIntent.FLAG_ONE_SHOT);


        Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.loading_icon)
                //.setContentTitle(notification.getTitle())
                .setContentTitle(title)
                .setContentText(subtitle)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0, notificationBuilder.build());
    }
}

我的 php 服务器文件:-

$fields = [
            'to'           => '/topics/test2',
            'data' => [
                "image" => "https://example.com/image.png",
                "title" => "aaaaaaa",
                "subtitle" => "bbbbbbb",
                "content" => "ccccc",
                "url" => "https://example.com/news90789/",
                "time" => "dddd",
                "category" => "rrrrrr"
            ]
        ];

您需要在通知时使用不同的通知 ID

notificationManager.notify(0, notificationBuilder.build());
// should be different.   ^^

通知(int id,通知通知)

发布要在状态栏中显示的通知。 如果您的应用程序已经发布了具有相同 id 的通知并且尚未取消,它将被更新的信息替换。

所以

int id = 0; 
notificationManager.notify(id++, notificationBuilder.build());
// should be different.   ^^
// you can use shared preference to keep track of id 
// so that in future you can cancel it via java code

因此它只显示一个:

notificationManager.notify(0, notificationBuilder.build());

改成这样:

int num = (int) System.currentTimeMillis();
notificationManager.notify(num, notificationBuilder.build());

每个通知的通知 ID 应该是唯一的。 现在您不会只有一个通知,因为它们会相互覆盖,这就是为什么当您单击通知时,您只会获得第一个值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM