使用Cloud Messaging实现远程推送功能

梦里水乡 2022-05-20 ⋅ 17 阅读

在现代移动应用开发中,远程推送功能是非常重要的一部分。它可以帮助应用向用户发送通知、提醒或其他重要信息,即使应用处于后台或未启动状态。Firebase Cloud Messaging(FCM)是一种强大的云服务平台,可以帮助开发者实现远程推送功能。本文将介绍如何使用FCM来实现远程推送功能,并提供一些进阶的用法。

FCM简介

FCM是由Google提供的一项云服务,用于帮助开发者向移动设备发送远程推送通知。它支持Android和iOS两个平台,并且具有以下重要特性:

  • 跨平台支持:FCM可同时向Android和iOS设备发送推送通知。
  • 可靠性:FCM使用可靠的传输机制,保证通知的实时到达。
  • 富媒体支持:FCM允许发送包含图像、音频、视频等多媒体元素的富媒体通知。
  • 目标定制:开发者可以根据特定条件,将通知发送给特定的用户或用户群体。
  • 统计和分析:FCM提供了详细的统计和分析报告,帮助开发者了解通知的发送和用户反馈情况。

开始使用FCM

要使用FCM实现远程推送功能,需要进行以下几个步骤:

1. 创建Firebase项目

在Firebase控制台上创建一个新的项目。在项目设置中,选择Cloud Messaging选项卡。在这里,你可以找到一个“服务器密钥”(用于将消息发送给FCM)和一个“默认的Web推送证书密钥”(用于将消息发送给Web应用)。

2. 配置Android应用

在Android项目中,添加Firebase SDK依赖,并添加google-services.json文件到你的项目中。在你的AndroidManifest.xml中,添加以下权限和代码:

<!-- FCM权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

<!-- 接收FCM消息 -->
<service
    android:name=".MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

<!-- 当设备处于休眠状态时唤醒 -->
<receiver
    android:name=".MyFirebaseMessagingReceiver"
    android:exported="true"
    android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="com.example.myapp" />
    </intent-filter>
</receiver>

<!-- 打开通知时启动指定活动 -->
<activity
    android:name=".MyNotificationActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="FCM_NOTIFICATION_ACTION" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

3. 实现MyFirebaseMessagingService

创建一个MyFirebaseMessagingService类,继承FirebaseMessagingService,并重写onMessageReceived方法。在该方法中,你可以对接收到的消息进行处理,并生成通知显示给用户。以下是一个示例代码:

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // 获取消息数据
        Map<String, String> data = remoteMessage.getData();

        // 解析数据并生成通知
        String title = data.get("title");
        String body = data.get("body");
        sendNotification(title, body);
    }

    private void sendNotification(String title, String messageBody) {
        // 创建通知
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle(title)
            .setContentText(messageBody)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT);

        // 显示通知
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
        notificationManager.notify(notificationId, builder.build());
    }
}

4. 向FCM发送消息

现在你已经配置好了Android应用,可以向FCM发送消息来触发通知。你可以在服务器端使用FCM的REST API发送消息,或使用FCM提供的管理界面手动发送消息。以下是一个使用FCM REST API发送消息的示例代码:

URL url = new URL("https://fcm.googleapis.com/fcm/send");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "key=YOUR_SERVER_KEY");
conn.setRequestProperty("Content-Type", "application/json");

conn.setDoOutput(true);
DataOutputStream outputStream = new DataOutputStream(conn.getOutputStream());

JSONObject message = new JSONObject();
message.put("to", "YOUR_DEVICE_TOKEN");
message.put("notification", new JSONObject().put("title", "Hello").put("body", "This is a test notification"));

outputStream.writeBytes(message.toString());
outputStream.flush();
outputStream.close();

int responseCode = conn.getResponseCode();
// 处理响应

以上代码通过POST请求向FCM发送通知,其中YOUR_SERVER_KEY是你在Firebase控制台中获取的服务器密钥,YOUR_DEVICE_TOKEN是指你要发送通知的设备的设备令牌。

进阶用法

除了基本的远程推送功能,FCM还提供了一些进阶用法。以下是一些可以尝试的特性:

1. 数据消息

使用FCM,你可以发送包含自定义数据的消息,而不仅仅是简单的通知。这些数据可以在应用的前台或后台中进行处理,并做出相应的操作。

{
    "to": "YOUR_DEVICE_TOKEN",
    "data": {
        "key1": "value1",
        "key2": "value2"
    }
}

2. 消息优先级

可以设置消息的优先级,从而为通知分配适当的处理级别。高优先级的消息将尽快传递给设备,即使设备处于休眠状态。

{
    "to": "YOUR_DEVICE_TOKEN",
    "priority": "high",
    "notification": {
        "title": "Hello",
        "body": "This is a high priority notification"
    }
}

3. 消息到期时间

可以设置消息的到期时间,在该时间之后,如果设备未连接到互联网,消息将会被丢弃。

{
    "to": "YOUR_DEVICE_TOKEN",
    "time_to_live": 60,
    "notification": {
        "title": "Hello",
        "body": "This message will expire in 60 seconds"
    }
}

4. 通知声音

可以为通知指定自定义的铃声。

{
    "to": "YOUR_DEVICE_TOKEN",
    "notification": {
        "title": "Hello",
        "body": "This is a test notification",
        "sound": "default"
    }
}

总结

使用Firebase Cloud Messaging,开发者可以轻松实现远程推送功能,并根据需要进行进阶设置。通过使用FCM,开发者可以向Android和iOS设备发送通知,并支持富媒体内容和定制目标。希望这篇博客对你们理解和使用FCM有所帮助。


全部评论: 0

    我有话说: