FCM(Firebase Cloud Messaging)发送到多个设备

3 浏览
0 Comments

FCM(Firebase Cloud Messaging)发送到多个设备

我使用FCM库执行此代码将通知推送到移动设备:

public string PushFCMNotification(List devicesIDs, string message) 
{
    string SERVER_API_KEY = "xxxxxxxxxxxxxxxxxxxxxxx";
    var SENDER_ID = "xxxxxxxxx";
    var value = message;
    WebRequest tRequest;
    tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
    tRequest.Method = "post";
    tRequest.ContentType = "application/json";
    tRequest.Headers.Add(string.Format("Authorization: key={0}", SERVER_API_KEY));
    tRequest.Headers.Add(string.Format("Sender: id={0}", SENDER_ID));
    var data = new
    {
        registration_ids = devicesIDs,
        notification = new
        {
            body = "This is the message",
            title = "This is the title",
            icon = "myicon"
        }
    };
    var serializer = new JavaScriptSerializer();
    var json = serializer.Serialize(data);
    Byte[] byteArray = Encoding.UTF8.GetBytes(json);
    tRequest.ContentLength = byteArray.Length;
    Stream dataStream = tRequest.GetRequestStream();
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
    WebResponse tResponse = tRequest.GetResponse();
    dataStream = tResponse.GetResponseStream();
    StreamReader tReader = new StreamReader(dataStream);
    String sResponseFromServer = tReader.ReadToEnd();
    tReader.Close();
    dataStream.Close();
    tResponse.Close();
    return sResponseFromServer;
}

现在,如何发送消息到多个设备,假设将字符串deviceId参数替换为List devicesIDs。你能帮忙吗?

0
0 Comments

在Firebase Cloud Messaging(FCM)中,当需要向多个设备发送消息时,出现了一个问题。原因是在v1版本中,不再支持使用registration_ids参数,而是建议使用topics来代替。解决方法是在payload中使用registration_ids参数来替代to参数。根据使用场景的不同,还可以使用Topic Messaging或Device Group Messaging。

Topic Messaging允许将消息发送给已订阅特定主题的多个设备。基于发布/订阅模型,每个应用程序支持无限订阅。你可以根据需要编写主题消息,Firebase负责路由和可靠地将消息传递给正确的设备。例如,天气预报应用程序的用户可以订阅“严重天气警报”主题,并接收指定区域的风暴通知。体育应用程序的用户可以订阅其喜欢的球队的实时比分自动更新。开发人员可以选择任何符合正则表达式"/topics/[a-zA-Z0-9-_.~%]+"的主题名称。

Device Group Messaging允许应用服务器向属于同一用户的设备组中的多个应用实例发送单个消息。设备组中的所有设备共享一个通知密钥,该密钥是FCM用于向设备组中的所有设备传递消息的令牌。设备组消息使得组中的每个应用实例都能反映最新的消息状态。除了向通知密钥发送下行消息外,还可以使设备向设备组发送上行消息。可以使用XMPP或HTTP连接服务器与设备组消息一起使用。向iOS设备发送的数据负载限制为2KB,其他平台为4KB。一个notification_key允许的最大成员数为20。

如果需要详细了解更多信息,可以参考“FCM中向多个设备发送消息”的文档。特别是当要发送的设备数量超过1000时,考虑使用topics来发送消息。

0
0 Comments

FCM (Firebase Cloud Messaging) Send to multiple devices问题的出现原因是需要向多个设备发送消息,但是在发送消息时,需要将设备的ID记录下来以备特殊用途。解决方法是创建一个主题(topic),让用户订阅该主题,这样当发送FCM消息时,所有订阅的用户都会收到。下面是解决方法的具体步骤:

1. 创建主题并让用户订阅该主题:

FirebaseMessaging.getInstance().subscribeToTopic("news");

详情请参考链接:https://firebase.google.com/docs/cloud-messaging/android/topic-messaging

2. 使用以下代码向多个设备发送消息:

https://fcm.googleapis.com/fcm/send

Content-Type:application/json

Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{

"to": "/topics/news",

"data": {

"message": "This is a Firebase Cloud Messaging Topic Message!",

}

}

以上就是解决FCM发送消息到多个设备的问题的方法。

0
0 Comments

FCM (Firebase Cloud Messaging) 是一种用于在移动设备和服务器之间发送消息的解决方案。在使用FCM发送消息到多个设备时,可能会遇到问题。下面的内容提供了一个解决方法:

首先,需要按照以下步骤进行操作:

public String addNotificationKey(
    String senderId, String userEmail, String registrationId, String idToken)
    throws IOException, JSONException {
URL url = new URL("https://android.googleapis.com/gcm/googlenotification");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
// HTTP request header
con.setRequestProperty("project_id", senderId);
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
con.setRequestMethod("POST");
con.connect();
// HTTP request
JSONObject data = new JSONObject();
data.put("operation", "add");
data.put("notification_key_name", userEmail);
data.put("registration_ids", new JSONArray(Arrays.asList(registrationId)));
data.put("id_token", idToken);
OutputStream os = con.getOutputStream();
os.write(data.toString().getBytes("UTF-8"));
os.close();
// Read the response into a string
InputStream is = con.getInputStream();
String responseString = new Scanner(is, "UTF-8").useDelimiter("\\A").next();
is.close();
// Parse the JSON string and return the notification key
JSONObject response = new JSONObject(responseString);
return response.getString("notification_key");
}

上面的代码是一个用于添加通知密钥的方法。具体步骤如下:

1. 创建一个URL对象,指向FCM的请求地址。

2. 打开一个HttpURLConnection连接。

3. 设置连接的输出为true。

4. 设置HTTP请求头部信息,包括项目ID、内容类型和接受类型。

5. 设置请求方法为POST。

6. 连接到服务器。

7. 创建一个JSONObject对象,用于存储请求数据。

8. 将操作类型、通知密钥名称、设备注册ID和身份令牌添加到JSONObject中。

9. 获取连接的输出流,并将JSONObject对象写入输出流中。

10. 关闭输出流。

11. 读取服务器响应,将其转换为字符串。

12. 解析JSON字符串,获取通知密钥。

13. 返回通知密钥。

希望上述代码能够帮助您在多个设备上发送推送消息。

如果需要更详细的信息,请参考以下链接:[https://firebase.google.com/docs/cloud-messaging/android/device-group](https://firebase.google.com/docs/cloud-messaging/android/device-group)。

注意:请务必阅读上述链接中有关创建/删除设备组的说明。

0