我正在使用phonegap-plugin-push插件在Ionic 2 Chat App中執行推送通知。使用Pub/Sub模型在Ionic 2中推送通知
我已經根據documentation實現了它,它工作,但只在同一個設備上。即,如果您提供device token
,它會向手機發送通知。
我的問題是針對一個聊天應用程序,我需要一個PubSub模型。因此,用戶可以發佈到某個主題,而另一個用戶可以訂閱該主題,即使他們處於不同的解決方案。
看着documentation,它似乎是可能的。見android.topics
和ios.topics
。
android.topics array []可選。如果數組包含一個或多個 字符串,則每個字符串將用於訂閱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客戶端:
訂閱
let push = Push.init({
android: {
senderID: "xxxxxxxx",
topics: ['foo']
},
ios: {
alert: "true",
badge: false,
sound: "true",
topics: ['foo']
},
windows: {}
});
push.on('notification', (data) => {
});
它可以在同一設備上,但如果publisher
和subscriber
在不同的設備不工作。
我認爲問題可能是即使另一個用戶訂閱了我發佈的主題,它仍然只發布到data.registrationId
(設備令牌)。
,請參閱Java服務器上以下行:
jGcmData.put("to", device_token);
問題
有誰知道如何使它發送到有關該主題的所有訂閱者?
我想答案是here:
"to": "/topics/foo-bar",
但是如何把這個多個主題進行格式化?(這只是一個話題foo-bar
)