0

Ionic 2 Chatアプリケーションでプッシュ通知を行うには、phonegap-plugin-pushプラグインを使用しています。Pub/SubモデルによるIonic 2のプッシュ通知

私はdocumentationに従って実装しましたが、動作しますが、同じデバイスでのみ動作します。すなわち、device tokenを入力すると、電話に通知が送信されます。

私のチャットアプリの問題は、PubSubモデルが必要です。ユーザーがトピックに公開することができ、別のユーザーが異なるデシジョンにあっても、そのトピックを購読することができます。

documentationを見ると、そうであるようです。 android.topicsおよびios.topicsを参照してください。

android.topics array []任意です。配列に1つまたは複数の 文字列が含まれている場合、各文字列はGcmPubSubトピックの購読に使用されます。

だから私は、次のことを試してください。

JavaScriptクライアント:

公開

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サーバー:

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クライアント:

は、それは、同じデバイス上で動作しますが、publishersubscriberは、異なるデバイス上にある場合、それは動作しません

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

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

    }); 

を購読します。

公開しているトピックを別のユーザーが購読していても、まだdata.registrationId(デバイストークン)にしか公開されていない可能性があります。

jGcmData.put("to", device_token); 

質問

誰もが、それはそのトピック上のすべてのユーザに送るようにする方法を知っています:

は、Java Server上で次の行を参照してください?

私は答えはhereだと思う:

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

しかし、どのようにこれは、複数のトピックのためにフォーマットする必要がありますか?(その1つだけのトピックfoo-barです)

答えて

関連する問題