Tôi gặp sự cố với plugin. Khi tôi đang ở trong ứng dụng, và tôi gửi thông báo với Parse, tôi nhận được một cảnh báo với thông điệp (điều này hoạt động như dự định). Tuy nhiên, khi ứng dụng ở chế độ nền, không có gì hiển thị trên điện thoại. Dưới đây là cách tôi sử dụng plugin và cách tôi xử lý thông báo:Parse CorodvaPush Ionic: Android không hiển thị thông báo khi ứng dụng ở chế độ nền
var gmcId = "xxxxxxx";
var androidConfig = {
senderID: gmcId
};
document.addEventListener("deviceready", function(){
$cordovaPush.register(androidConfig).then(function(result) {
console.log("result: " + result);
}, function(err) {
// Error
})
$rootScope.$on('$cordovaPush:notificationReceived', function(event, e) {
switch(e.event)
{
case 'registered':
if (e.regid.length > 0)
{
// Your GCM push server needs to know the regID before it can push to this device
// here is where you might want to send it the regID for later use.
console.log("regID = " + e.regid);
}
break;
case 'message':
// if this flag is set, this notification happened while we were in the foreground.
// you might want to play a sound to get the user's attention, throw up a dialog, etc.
if (e.foreground)
{
// if the notification contains a soundname, play it.
navigator.notification.beep(1);
alert(e.payload.data.alert)
}
else
{ // otherwise we were launched because the user touched a notification in the notification tray.
if (e.coldstart)
{
}
else
{
navigator.notification.beep(1);
alert(e.payload.data.alert)
}
}
break;
case 'error':
$("#app-status-ul").append('<li>ERROR -> MSG:' + e.msg + '</li>');
break;
default:
$("#app-status-ul").append('<li>EVENT -> Unknown, an event was received and we do not know what it is</li>');
break;
}
});
}, false);
Cảm ơn !!
Btw, đây là cấu trúc của thông báo Parse mà tôi nhận được:
{"collapse_key":"do_not_collapse",
"event":"message",
"foreground":true,
"from":"xxxxxxxxxx",
"payload":{
"data": {"alert":"asdasdas","push_hash":"bff149a0b87f5b0e00d9dd364e9ddaa0"},"push_id":"2iFhVp2R4u","time":"2015-07-21T12:24:09.905Z"}}
ĐÁP:
Vì vậy, sau hai ngày kéo tóc của tôi, tôi cuối cùng đã cố gắng để khắc phục vấn đề. Vì vậy, vấn đề là nó không quan trọng làm thế nào bạn chỉ định JSON trong Parse, nó luôn luôn gửi trong biểu mẫu được trình bày ở trên - có nghĩa là những gì bạn chỉ định luôn ở trong payload-> data -> 'key': 'value'. Tuy nhiên, GCMIntentService tìm kiếm một thông báo, có "message" trong lớp đầu tiên của JSON. Ý nghĩa, nó phải trông như thế:
{"collapse_key":"do_not_collapse",
"event":"message",
"foreground":true,
"from":"xxxxxxxxxx",
"message":"ssadasdasdsa"
......}
Bạn có thể thấy rằng nó được quy định trong GCMIntentService.java bên dưới dòng bắt đầu "protected void onMessage" (Tôi nghĩ rằng dòng của nó 53).
Dù sao, bạn sửa lỗi này, chúng ta cần phải thay đổi cách xử lý thông báo khi ứng dụng không ở nền trước. Chúng ta cần phải thay đổi nó thành:
@Override
protected void onMessage(Context context, Intent intent) {
Log.d(TAG, "onMessage - context: " + context);
// Extract the payload from the message
Bundle extras = intent.getExtras();
if (extras != null)
{
// if we are in the foreground, just surface the payload, else post it to the statusbar
if (PushPlugin.isInForeground()) {
extras.putBoolean("foreground", true);
PushPlugin.sendExtras(extras);
}
else {
try {
JSONObject object_example = new JSONObject(extras.getString("data"));
String message = object_example.getString("alert");
extras.putString("message", message);
} catch (JSONException e) {
//some exception handler code.
}
createNotification(context, extras);
}
}
}
Ở đây, mã của chúng ta sẽ đi vào xem xét rằng thông báo của chúng tôi doesnt có 'thông điệp' trong lớp đầu tiên của JSON - nó sẽ tìm kiếm nó ở đĩa dữ liệu> alert (mẫu của thông báo từ PARSE).
Tôi hy vọng điều đó sẽ hữu ích, bởi vì tôi đã dành nhiều thời gian để cố gắng tìm ra nó :).
Tôi đã gặp rất nhiều vấn đề khi sử dụng Plugin Parse, do đó tôi muốn gắn với cordovaPush. Tôi không có bất kỳ vấn đề nào liên quan đến phần đăng ký của mã thông báo và userId, tôi gặp sự cố khi đăng ký thông báo - tôi có thể nhận thông báo bằng cảnh báo (notification.payload.data.alert), nhưng tôi không thể nhận được thông báo khi ứng dụng ở trong lý lịch. – uksz
ok, tò mò bạn gặp phải vấn đề gì với plugin? chúng tôi đã triển khai một ngã ba của phiên bản mới nhất trong 3 ứng dụng của khách hàng cho đến nay mà không có vấn đề gì, sẽ đánh giá cao bất kỳ sự khởi đầu nào bạn có thể cung cấp. –