将FCM消息从API服务器发送到多个设备?

时间:2018-12-04 11:41:01

标签: asp.net firebase xamarin.forms firebase-cloud-messaging

我目前正在努力在应用程序中启用推送通知。我的问题是,我想向所有用户(属于某个组的成员)发送通知,并且我不太了解此用例的最佳做法。

这是因为既有“主题”又有“设备组”,但是从我的发现中,主题更像是订阅应用程序的新闻部分,设备组主要用于具有多个主题的用户与他/她连接的设备。

我想要的是向用户列表发送一条消息,但是我并不想在数据库中为每个组创建一个主题,并且我不想为每个用户都拨打FCM小组成员。我该怎么办?

2 个答案:

答案 0 :(得分:1)

依赖性

    <dependency>
        <groupId>com.google.gcm</groupId>
        <artifactId>gcm-server</artifactId>
        <version>1.0.0</version>
    </dependency>

在pom.xml中添加依赖项

        HttpPost post = new HttpPost("https://fcm.googleapis.com/fcm/send");
        post.setHeader("Content-type", "application/json");

        post.setHeader("Authorization", "key="+<Your firebase application key>);

        JSONObject message = new JSONObject();
        List<FirebaseIOSToken> tokens; new Arraylist(); // get device tokens from database 

            if(tokens!=null) {

            for (FirebaseIOSToken token : tokens) {

            try {
                message.put("to",token.getDevicetoken());
            } catch (JSONException e) {

                e.printStackTrace();
            }
            message.put("priority", "High");

            JSONObject notification = new JSONObject();
            notification.put("title", "Test Notification");             
            notification.put("body", "Hello World");
            notification.put("data", "Data");
            notification.put("id", "notification id");

            message.put("notification", notification);

            post.setEntity(new StringEntity(message.toString(), "UTF-8"));
            HttpResponse response = client.execute(post);
            System.out.println(response);
            System.out.println(message);
        }
    }
    else
    {
        System.out.println("Token Not Fonund");
    }

    return "Sent";

答案 1 :(得分:-1)

我在FCM docs找到了一个很好的解决方案,在这里我不必使用“ to”标头参数,而只需要使用“ registration_ids”参数即可将多个标记解析为一个数组。