Notificações por push no Ionic 2 com o modelo Pub / Sub

Estou usando ophonegap-plugin-push plugin para fazer notificações push em um aplicativo de bate-papo Ionic 2.

Eu o implementei de acordo com odocumentação, e funciona, mas apenas no mesmo dispositivo. ou seja, envia uma notificação para o telefone se você fornecer suadevice token.

Meu problema é com um aplicativo de bate-papo, preciso de umPubSub modelo. Para que um usuário possa publicar em um tópico e outro usuário possa se inscrever nesse tópico, mesmo que eles estejam em diferentes decks.

Olhando para odocumentação, parece ser possível. Vejoandroid.topics eios.topics.

matriz android.topics [] Opcional. Se a matriz contiver uma ou mais cadeias, cada cadeia será usada para assinar um tópico GcmPubSub.

Então, eu tento o seguinte:

Cliente Javascript:

publicar

    let push = Push.init({
      android: {
        senderID: "xxxxxxxx",
        topics: ['foo']
      },
      ios: {
        alert: "true",
        badge: false,
        sound: "true",
        topics: ['foo']
      },
      windows: {}
    });

push.on('registration', (data) => {
  // call the Java Server
  let promise: Promise<string> = this.notificationService.push(data.registrationId, 'This is a test message from Ionic Chat');
  promise.then((data) => {

  });
});

Servidor Java:

try {
    System.out.println("NotificationService: device_token: "+device_token);
    logger.info("NotificationService: device_token: "+device_token);
    // Prepare JSON containing the GCM message content. What to send and where to send.
    JSONObject jGcmData = new JSONObject();
    JSONObject jData = new JSONObject();
    jData.put("title", "This is title");
    jData.put("message", message);
    jGcmData.put("to", device_token);  // <===== is this the problem???? it is the data.registrationId from the client
    // What to send in GCM message.
    jGcmData.put("data", jData);
    // Create connection to send GCM Message request.
    URL url = new URL("https://gcm-http.googleapis.com/gcm/send");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestProperty("Authorization", "key=" + API_KEY);
    conn.setRequestProperty("Content-Type", "application/json");
    conn.setRequestMethod("POST");
    conn.setDoOutput(true);
    // Send GCM message content.
    OutputStream outputStream = conn.getOutputStream();
    outputStream.write(jGcmData.toString().getBytes());
} catch (Exception e) {
    e.printStackTrace();
}

Cliente Javascript:

Se inscrever

    let push = Push.init({
      android: {
        senderID: "xxxxxxxx",
        topics: ['foo']
      },
      ios: {
        alert: "true",
        badge: false,
        sound: "true",
        topics: ['foo']
      },
      windows: {}
    });

    push.on('notification', (data) => {

    });

Funciona no mesmo dispositivo, mas não funciona se opublisher esubscriber estão em dispositivos diferentes.

Acho que o problema pode ser que, embora outro usuário esteja inscrito no tópico em que publico, ele ainda está publicando apenas nodata.registrationId (Token de dispositivo).

Consulte a seguinte linha no servidor Java:

jGcmData.put("to", device_token);

Pergunta, questão

Alguém sabe como fazer para enviar a todos os assinantes sobre esse tópico?

Eu acho que a resposta éaqui:

"to": "/topics/foo-bar",

Mas como isso deve ser formatado para vários tópicos? (esse é apenas um tópicofoo-bar)

questionAnswers(1)

yourAnswerToTheQuestion