如何从Android设备向服务器发送FCM消息?

时间:2016-10-13 16:36:22

标签: android firebase push-notification firebase-cloud-messaging

有大量文档说明如何从服务器向Android设备发送消息,但几乎没有任何可用于将其从Android设备发送到服务器的文档。

我们正在制作一款应用,用户可以在某些情况下接收来自彼此的通知。我收到的消息很好,我的代码在收到时解析它们。另一方面,发送消息不起作用。

我正在尝试使用的代码是:

public static void sendNotificationToUser(String userId, final String message){
        FirebaseMessaging messaging = FirebaseMessaging.getInstance();

        Bundle someBundle = new Bundle();
        someBundle.putString("STRING_KEY_HERE", "STRING_VALUE_HERE");
        //I have tried excluding the @gcm as well, no luck.
        String str = "user_" + userId + "@gcm.googleapis.com";

        RemoteMessage.Builder myBuilder = new RemoteMessage.Builder(str);
        Map<String, String> aMap = new HashMap<>();

        aMap.put("DATA_KEY_1", "DATA_VALUE_1");
        myBuilder.setData(aMap);
        myBuilder.addData("ADD_DATA1", "ADD_DATA11");
        myBuilder.setMessageId("SOME_MESSAGE_ID123");
        myBuilder.setTtl(0); //Send immediately
        myBuilder.setMessageType("SOME_MESSAGE_TYPE");
        myBuilder.setCollapseKey("SOME_COLLAPSE_KEY");

        //Can't do this, private access, how do I instantiate this?
        RemoteMessage.Notification notification = new RemoteMessage.Notification();
        RemoteMessage remoteMessage = myBuilder.build();

        messaging.send(remoteMessage);
    }

这里的问题是,一旦发生这种情况,就不会发生任何事情。具体来说,我要做的是按订阅主题发送消息。因此,如果我订阅了android_tag,我想将此邮件发送到android_tag,这是userId设置的位置;我让该用户订阅了user_{theirtag}

有没有人知道如何向特定主题发送出站FCM消息?另外,如何实例化并包含RemoteMessage.Notification对象,因为它不能按照我上面列出的方式完成?

谢谢大家。

编辑: 看起来根据Mr Frank van Puffelen的答案是否定的,不能直接通过SDK完成。它可以通过主题订阅的组合来完成,并包括一个服务器来处理实际的发送(here),但不应该在没有使用服务器的情况下完成以防止秘密/服务器密钥曝光。

0 个答案:

没有答案