5

Cố gắng xử lý thông báo đẩy bằng cách sử dụng PushPlugin. Sau đây là mã của tôi.Cách xử lý thông báo Push khi ứng dụng được tiếp tục?

onNotificationGCM: function(e) { 
    switch(e.event) 
    { 
     case 'registered': 
      if (e.regid.length > 0) 
      { 
       console.log("Regid " + e.regid); 
       //alert('registration id = '+e.regid); 
       sDeviceId = e.regid; 
       //alert(sDeviceId); 
      } 
      break; 

     case 'message': 
      // this is the actual push notification. its format depends on the data model from the push server 
      alert('message = '+e.message); 
      alert('message = '+e.message+' msgcnt = '+e.msgcnt); 
      if (e.foreground) 
      { 
       alert("Notification Received"); 

      } 
      else 
      { // otherwise we were launched because the user touched a notification in the notification tray. 
       if (e.coldstart) 
       { 
        alert("coldstart"); 
       } 
       else 
       { 
        alert("other than coldstart"); 
       } 
      } 
      break; 

     case 'error': 
      alert('GCM error = '+e.msg); 
      break; 

     default: 
      alert('An unknown GCM event has occurred'); 
      break; 
    } 
} 

Vì vậy, mọi thứ đều hoạt động.

  • khi ứng dụng ở tiền cảnh Tôi nhận được cảnh báo.

  • khi nhấp vào thông báo khi nhận được tin nhắn ứng dụng sẽ mở ra và tôi nhận được cảnh báo. (Coldstart)

  • khi ứng dụng ở chế độ nền và sau đó nhấp vào thông báo các ứng dụng đi kèm trong foreground và tôi đang nhận được thông báo .

Nhưng khi tôi giữ ứng dụng ở chế độ nền và khi thông báo đẩy đến mà không cần nhấp vào thông báo khi tôi đưa ứng dụng lên phía trước, tôi không nhận được cảnh báo. Làm thế nào để xử lý loại tình huống này?

+0

Cảm ơn Ajoy, tôi đã cố gắng hết sức mình để giải thích các problem.I sẽ lưu ý đề xuất của bạn mặc dù. –

Trả lời

4

Tôi đã gặp phải vấn đề tương tự. Nói một cách đơn giản, PushPlugin không hỗ trợ tính năng này ngay bây giờ. Nhưng bạn có thể rất dễ dàng sửa đổi nó cho phù hợp với nhu cầu của bạn

Cách thức hoạt động tại

Khi một thông điệp được nhận bởi các plugin của GCMIntentService, onMessage được gọi. Phương thức này lấy tất cả các tham số bổ sung được truyền vào nó, lưu chúng trong extras. Sau này, nếu ứng dụng ở phía trước, chức năng này chỉ cần chuyển extras cho bạn bằng cách gọi sendExtras. Nếu không, nó sẽ gọi createNotification, thực tế sẽ tạo thông báo trên thanh trạng thái.

Vấn đề của bạn

Từ những gì tôi đã hiểu từ câu hỏi của bạn, cảnh báo không được nhận nếu, sau khi nhận được một thông báo trong thanh trạng thái, bạn mở ứng dụng của bạn mà không cần chạm vào thông báo.

Đây là những gì sẽ xảy ra:

  1. GCMIntentService nhận được một thông điệp
  2. Kể từ khi ứng dụng của bạn trong background, PushPlugin gọi createNotification
  3. Khi bạn khởi động ứng dụng của bạn, nó được không tỉnh táo, bởi vì bạn chưa chưa chạm vào thông báo trên thanh trạng thái

Bạn sẽ nhận được cảnh báo nếu bạn đã chạm vào thông báo do đó, mục đích thông báo sẽ đánh thức ứng dụng của bạn. Khi ứng dụng của bạn thức dậy, hãy tìm kiếm cached extras và sau đó chuyển chúng đến ứng dụng của bạn bằng cách gọi lại sendExtras.

Giải pháp

tôi đã không kiểm tra này được nêu ra, nhưng tôi tin chắc rằng nếu bạn chỉnh sửa plugin của bạn, để sendExtras trước (hoặc sau) bạn gọi createNotification, dữ liệu sẽ được lưu trữ cho các ứng dụng của bạn bất kể cho dù bạn chạm vào thông báo hay vuốt nó đi.

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 { 
      extras.putBoolean("foreground", false); 
      // Send a notification if there is a message 
      if (extras.getString("message") != null && extras.getString("message").length() != 0) { 
       createNotification(context, extras); 
      } 
     } 
    } 
} 

Sửa đổi phần trên để:

protected void onMessage(Context context, Intent intent) { 
    Log.d(TAG, "onMessage - context: " + context); 
    Bundle extras = intent.getExtras(); 
    if (extras != null) 
    { 
     if (PushPlugin.isInForeground()) { 
      extras.putBoolean("foreground", true); 
     } 
     else { 
      extras.putBoolean("foreground", false); 
      if (extras.getString("message") != null && extras.getString("message").length() != 0) { 
       createNotification(context, extras); 
      } 
     } 
     // call sendExtras always 
     PushPlugin.sendExtras(extras); 
    } 
} 
+1

Cảm ơn câu trả lời Ajoy, Nó hoạt động Bạn có thể giúp tôi làm điều tương tự trong IOS không? –

+0

@ AJ-- Tôi sẽ sớm cập nhật câu trả lời của tôi. – Ajoy

+0

chờ giải pháp trong ios cho cùng một vấn đề .. –

1

Khi ứng dụng là trong nền có thể bạn cần phải lưu playload thông báo cho localStorage và sau đó trong resume sự kiện của ứng dụng đọc nó từ localStorage và hiển thị thông báo cảnh báo.

Dưới đây là một link with a similar problem

Các vấn đề liên quan