当前位置: 首页 > 知识库问答 >
问题:

如何显示与服务器一起发送的FCM Firebase通知

卜泓
2023-03-14

Firebase提供了两种放置推送通知的方法,一种是使用它的Firebase控制台,另一种是使用以前在GCM中使用的服务器。现在我们正在将我们的服务器GCM转换为Firebase,我们需要在应用程序中接收并显示FCM通知。

我已经完成了firebase官方网站的实现,并且完成了示例代码,但是我仍然停留在这一部分上。当我们的服务器向Firebase发送推送通知,并且Firebase向我的应用程序发送通知时,我将以OnMessageReceived方法接收通知,该方法带有RemoteMessage参数。我知道消息在RemoteMessage参数内部,但我在Firebase官方文档中找不到任何关于如何处理这一点以显示android设备通知栏上的通知文本的指南或示例代码。

正如您在官方指南中所看到的,没有解释如何从RemoteMessage参数中提取没有问题的消息。我知道你可以在里面搜索并找到字符串,但我想找到一个关于如何正确和安全地处理这个的官方指南。

在正式文档中,您只有以下内容:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {    
    // TODO(developer): Handle FCM messages here.
    Log.d(TAG, "From: " + remoteMessage.getFrom());

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());
        // Handle message within 10 seconds    
    }

    // Check if message contains a notification payload.
    if (remoteMessage.getNotification() != null) {
        Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
    }

    // Also if you intend on generating your own notifications as a result of a received FCM
    // message, here is where that should be initiated. See sendNotification method below.
}

和这个(指南中没有调用它):

   private void sendNotification(String messageBody) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent 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.ic_main)
                        .setContentTitle("FCM Message")
                        .setContentText(messageBody)
                        .setAutoCancel(true)
                        .setSound(defaultSoundUri)
                        .setContentIntent(pendingIntent);

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

        notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
    }

共有1个答案

子车安和
2023-03-14

我已经做了类似的事情我正在使用addNotifcation()来代替sendNotification()

public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "FCM Service";

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    Log.d(TAG, "From: " + remoteMessage.getFrom());
    Log.d(TAG, "Notification Message Body: " + remoteMessage.getData().get("body"));
    addNotification(remoteMessage.getData().get("body"), remoteMessage.getData().get("Nick"));
}

private void addNotification(String message, String title) {
    NotificationCompat.Builder builder =
            (NotificationCompat.Builder) new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.mipmap.ic_launcher1)
                .setContentTitle(title)
                .setContentText(message);

    Intent notificationIntent = new Intent(this, app.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);
    builder.setContentIntent(contentIntent);

    // Add as notification
    NotificationManager manager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
    manager.notify(0, builder.build());
}
 类似资料:
  • 问题内容: 我已经通过使用ApacheCXF(v3.0.4)实现了JAX-WS客户端,并且一切正常,但是当我想在Java 8(jdk1.8.0_25)中使用安全连接(SSL / TLS)时出现了问题。 我在日志(-Djavax.net.debug = all)中看到以下异常: 经过depeer分析后,我发现问题是由于Java 8不会发送server_name(SNI),而Java 7却发送了ser

  • 我在android应用程序中使用nodeJS和mongodb作为后端服务,并使用FCM向用户发送推送通知。为了实现这一点,我在MongoDB上保存了firebase注册令牌。 我想在相应的用户在MongoDb服务器上添加数据时向他们发送推送通知。 这是我在下面添加数据库数据的代码。 现在,一旦数据添加到数据库中,我想向用户发送通知。有人请让我知道如何才能实现所需的任务。任何帮助都将不胜感激。 谢谢

  • 问题内容: 我一直很难完成必须完成的一项非常正常的任务。我将图像上传并保存到Web服务器,并将该文件的路径保存在MySQL数据库中(这一切正常)。不起作用的是从服务器获取图像文件,并通过ajax在页面上显示它。 最初,我只是尝试从数据库中检索路径,并使用图像的路径更新标签的属性。这是可行的,但是所有映像都位于服务器上的文件夹中,所有人都可以访问它们。不是很好。我只能让这些用户访问属于某些用户的图片

  • 我正在使用android。我需要从服务器向选定的用户发送通知,因此,我必须集成Firebase云消息或谷歌云消息。 除了分析之外,FCM和GCM之间的确切区别是什么?我可以将FCM与服务器集成吗?

  • 问题内容: 假设我们尝试与发送回XML数据的服务器(XMPP)通信。我们可以用 但是存在一个问题,即服务器不发送\ 10(换行符)符号。我也尝试了12次,但是没有任何运气。readLine函数也是如此,因为它也依赖\ 10。那么,如何读取服务器发送的数据?我尝试使用“>”作为分隔符,并成功仅接收了部分消息(可预测)。我有一个在错误为nil时循环并使用’>’分隔符的想法,但它也没有用。我的研究表明,

  • 问题内容: 双方的WebSockets和服务器发送的事件能够将数据推送到浏览器。在我看来,它们似乎是竞争技术。它们之间有什么区别?您何时会选择一个? 问题答案: Websocket和SSE(服务器发送事件)都能够将数据推送到浏览器,但是它们不是竞争技术。 Websockets连接既可以将数据发送到浏览器,也可以从浏览器接收数据。可以使用websockets的应用程序的一个很好的例子是聊天应用程序。