Firebase Cloud Messaging实现浏览器消息提醒

Firebase Cloud Messaging(FCM)是 Firebase 提供的一项跨平台消息传递服务,用于向移动设备、Web 应用程序和服务器发送消息和通知。它为开发者提供了一种简单而强大的方式,可以轻松地向用户推送即时通知、消息和数据,从而增强应用的用户体验和参与度。

以下是 Firebase Cloud Messaging 的主要特点和功能:

  1. 跨平台支持: FCM 可以发送消息和通知到 Android、iOS、Web 应用程序和其他移动和 Web 客户端。

  2. 消息类型: FCM 支持发送不同类型的消息,包括通知消息(通知栏消息)、数据消息(仅携带数据,不显示通知)、数据/通知混合消息等。

  3. 高效的传输: FCM 提供了高效的消息传输通道,确保消息可以快速地传送到目标设备,无论是通过移动网络还是 Wi-Fi。

  4. 目标定位: 开发者可以通过各种方式指定消息的接收者,包括单个设备、设备群组、主题订阅等,以便将消息发送给特定的目标用户。

  5. 消息分析: FCM 提供了丰富的消息分析功能,可以帮助开发者了解消息的发送情况、接收情况和用户行为,以便优化消息推送策略。

  6. 可配置性: 开发者可以在 Firebase 控制台或通过 API 对消息进行灵活的配置和定制,包括消息内容、优先级、过期时间、消息标签等。

  7. 与其他 Firebase 服务集成: FCM 可以与其他 Firebase 服务集成,如实时数据库、云存储、身份认证等,为开发者提供更多的功能和服务。

总的来说,Firebase Cloud Messaging 是一项功能强大、易于使用的消息传递服务,为开发者提供了一种简单而可靠的方式,用于向移动设备和 Web 应用程序发送通知、消息和数据,从而提高应用的用户参与度和体验。

1、需要在https://console.firebase.google.com/完成项目的创建,以及获取相关配置文件比如服务账户密钥FirebaseFile.json文件

2、引用Maven依赖

<dependency>
    <groupId>com.google.firebase</groupId>
    <artifactId>firebase-admin</artifactId>
    <version>9.2.0</version>
</dependency>

3、FCMMessageSender发送消息实现类(Java后端代码,Web端代码需要前端同学单独实现)

/**
 * @author Lucas
 * date 2024/4/16 12:48
 * description 谷歌发送消息
 */
@Slf4j
@Component
public class FCMMessageSender {

    // 初始化 FirebaseApp
    static {
        try {
            //获取resources下Firebase服务账户密钥FirebaseFile.json文件
            InputStream inputStream = ResourceUtil.getStream("FirebaseFile.json");
            FirebaseOptions options = new FirebaseOptions.Builder()
                    .setCredentials(GoogleCredentials.fromStream(inputStream))
                    .build();
            FirebaseApp.initializeApp(options);
        } catch (Exception e) {
            log.error("Error initializing FirebaseApp: " + e.getMessage());
        }
    }

    /**
     * 向指定设备发送消息
     * @param deviceToken       接收方设备注册令牌Token
     * @param title             标题
     * @param messageBody       内容
     */
    public void sendToOne(String deviceToken, String title, String messageBody) {
        // 构建消息体
        Message message = Message.builder()
                .setToken(deviceToken)
                .setNotification(Notification.builder()
                        .setTitle(title)
                        .setBody(messageBody)
                        .build())
                .setAndroidConfig(AndroidConfig.builder()
                        .setPriority(AndroidConfig.Priority.HIGH)
                        .setNotification(AndroidNotification.builder()
                                .setSound("default")
                                .build())
                        .build())
                .build();

        // 发送消息
        try {
            String response = FirebaseMessaging.getInstance().send(message);
            log.info("Successfully sent message: " + response);
        } catch (Exception e) {
            log.error("Error sending message: " + e.getMessage());
        }
    }

    /**
     * 设备订阅主题
     * @param topicName         订阅的主题名称
     * @param clientToken       订阅主题的接收方设备注册令牌Token
     */
    public void subscribeToTopic(String topicName, String clientToken) {
        // 执行订阅请求
        try {
            TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(Arrays.asList(clientToken), topicName);
            log.info("Successfully subscribed to topic: " + response.getSuccessCount() + " devices.");
        } catch (Exception e) {
            log.error("Error subscribing to topic: " + e.getMessage());
        }
    }

    /**
     * 向订阅的主题发送消息
     * @param topicName         订阅的主题名称
     * @param title             标题
     * @param messageBody       内容
     * @param icon              图标
     * @param image             图片
     * @param openPage          打开页面
     */
    public void sendToTopic(String topicName, String title, String messageBody, String icon, String image, String openPage) {
        // 构建消息体
        Message message = Message.builder()
                .setNotification(Notification.builder()
                        .setTitle(title)
                        .setBody(messageBody)
                        .setImage(image)
                        .build())
                .putData("icon", StrUtil.isNotBlank(icon) ? icon : "")
                .putData("openPage", StrUtil.isNotBlank(openPage) ? openPage : "")
                .setTopic(topicName)
                .build();

        // 发送消息
        try {
            String response = FirebaseMessaging.getInstance().send(message);
            log.info("Successfully sent message to topic: " + response);
        } catch (Exception e) {
            log.error("Error sending message to topic: " + e.getMessage());
        }
    }
}

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值