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クライアント:
は、それは、同じデバイス上で動作しますが、publisher
とsubscriber
は、異なるデバイス上にある場合、それは動作しません
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
です)