有大量文档说明如何从服务器向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),但不应该在没有使用服务器的情况下完成以防止秘密/服务器密钥曝光。