Push Notifications in Ionic 2 mit dem Pub / Sub Model

Ich benutze das phonegap-plugin-push Plugin für Push-Benachrichtigungen in einer Ionic 2-Chat-App.

Ich habe es nach dem @ implementieDokumentatio, und es funktioniert, aber nur auf demselben Gerät. Das heißt, es sendet eine Benachrichtigung an das Telefon, wenn Sie sein @ eingebedevice token.

Mein Problem ist für eine Chat-App, ich brauche ein PubSub model. Damit ein Benutzer zu einem Thema veröffentlichen und ein anderer Benutzer dieses Thema abonnieren kann, auch wenn er sich in einem anderen Bereich befindet.

Mit Blick auf dieDokumentatio, es scheint möglich zu sein. Sehenandroid.topics undios.topics.

rray @ android.topics [] Optional. Wenn das Array eine oder mehrere Zeichenfolgen enthält, wird jede Zeichenfolge zum Abonnieren eines GcmPubSub-Themas verwendet.

So versuche ich das folgende:

Javascript Client:

veröffentliche

    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) => {

  });
});

Java Server:

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();
}

Javascript Client:

Abonniere

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

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

    });

Es funktioniert auf demselben Gerät, aber es funktioniert nicht, wenn daspublisher undsubscriber sind auf verschiedenen Geräten.

Ich denke, das Problem könnte sein, dass obwohl ein anderer Benutzer das Thema abonniert hat, in dem ich veröffentliche, es immer noch nur im @ veröffentlicht wirdata.registrationId (Geräte-Token).

Siehe die folgende Zeile auf dem Java Server:

jGcmData.put("to", device_token);

Frag

Weiß jemand, wie man es an alle Abonnenten zu diesem Thema sendet?

Ich denke, die Antwort istHie:

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

Aber wie sollte dies für mehrere Themen formatiert werden? (das ist nur ein Themafoo-bar)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage