2017-03-03 14 views
7

Tôi có một ứng dụng sẽ hiển thị thông báo cảnh báo trong khi ứng dụng ở cả nền trước và nền (không có trong lịch sử).Cách nhận thông báo Cảnh báo trong Android bằng cách sử dụng Nhắn tin qua đám mây của Firebase (Thông báo) trong khi ứng dụng không có tiền cảnh?

Trong trường hợp tiền cảnh, tôi đã đạt được điều này bằng phương pháp folowing.

PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx); 
    builder.setFullScreenIntent(pendingIntent,true); 

Nhưng ở chế độ nền, nó luôn luôn hiển thị trong thông báo area.Can ai biết làm thế nào để đạt được điều này ở chế độ nền (không có trong lịch sử)

tôi đã cố gắng các thông số dưới đây để thông báo nhưng không làm việc.

{ 
    "to" : "_Token_", 
    "priority":"high", 
    "data": 
    { 
     "title": "Test", 
     "text": "Fcm" 
    }, 
    "notification": 
    { 
     "title": "Test", 
     "text": "Fcm" 
    } 
} 
+0

Xin chào.Bởi "* nền (không có trong lịch sử) *", bạn có nghĩa là ứng dụng được * giết chết *? –

Trả lời

2

Firebase cho phép tùy chỉnh thông báo khi thông điệp dữ liệu được sử dụng. Các thông báo dữ liệu gọi phương thức onMessageReceived() ngay cả khi ứng dụng trong backgroud để bạn tạo thông báo tùy chỉnh của mình.

Bạn có thể tham khảo các link này để biết thêm về thông báo dữ liệu Firebase notifications

+0

Nhưng nếu chúng tôi sử dụng tin nhắn dữ liệu, chúng tôi không thể nhận được thông báo khi chúng tôi xóa ứng dụng khỏi nền. – SachinS

+0

Thông báo tin nhắn dữ liệu được nhận ngay cả khi chúng tôi xóa ứng dụng khỏi các ứng dụng gần đây – Neha

+0

tôi đã thử thông báo và tin nhắn dữ liệu. It không hoạt động. Tài liệu nói "Khi ứng dụng ở chế độ nền, Android sẽ chuyển thông báo thông báo tới khay hệ thống. Người dùng nhấn vào thông báo sẽ mở trình khởi chạy ứng dụng theo mặc định ". – SachinS

0

thay vì sử dụng setFullScreenIntent(), hãy thử này:

PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx); 
builder.setPriority(NotificationCompat.PRIORITY_MAX); 
builder.setSound(URI_TO_SOUND); 
builder.setVibrate(ARRAY_WITH_VIBRATION_TIME); 

Edit: cho nền bạn nên làm simillar. Để hiển thị thông báo Cảnh báo, cần có sự kết hợp của âm thanh và/hoặc độ rung ưu tiên cao (tốt nhất là cả hai).

Edit2: Tốt bạn có thể hiển thị thông báo này do onMessageReceived() phương pháp, ở đây: https://firebase.google.com/docs/cloud-messaging/android/receive#override-onmessagereceived

0

Bạn hoàn toàn có nên xóa phần thông báo từ Json của bạn và chỉ sử dụng dữ liệu! Đó là mẹo. Ý tôi là:

{ 
"to" : "_Token_", 
"priority":"high", 
"data": 
{ 
    "title": "Test", 
    "text": "Fcm" 
} 
} 

Khi bạn có thẻ thông báo trong Json, đôi khi thư viện quyết định xử lý thông báo. do đó, khi ứng dụng của bạn ở chế độ nền trước, nó sẽ không gọi cho người nhận tin nhắn của bạn và nó hiển thị thông báo.

Chỉ cần xóa thông báo và luôn sử dụng thẻ dữ liệu.

Nó hoạt động cả khi ứng dụng của bạn trong foreground/nền hoặc thiệt mạng và ngừng

0
{ 
    "to":"push-token", 
    "priority": "high", 
    "notification": { 
     "title": "Test", 
     "body": "Mary sent you a message!", 
     "sound": "default", 
     "icon": "youriconname" 
    } 
} 

Kiểm tra này ra: Create Heads-Up Display

+0

Chào mừng bạn đến với Stack Overflow! Trong khi điều này về mặt lý thuyết có thể trả lời câu hỏi, [nó sẽ là thích hợp hơn] (// meta.stackoverflow.com/q/8259) để bao gồm các phần thiết yếu của câu trả lời ở đây, và cung cấp liên kết để tham khảo. –

0

Bạn cần phải thêm dịch vụ người nghe của bạn, như bạn sẽ ở một triển khai GCM chuẩn.


             
  
public class MyGcmListenerService extends GcmListenerService { 
 

 
     private static final String TAG = "MyGcmListenerService"; 
 

 
     /** 
 
     * Called when message is received. 
 
     * 
 
     * @param from SenderID of the sender. 
 
     * @param data Data bundle containing message data as key/value pairs. 
 
     *    For Set of keys use data.keySet(). 
 
     */ 
 
     // [START receive_message] 
 
     @Override 
 
     public void onMessageReceived(String from, Bundle data) { 
 
      String message = data.getString("message"); 
 
      Log.d(TAG, "From: " + from); 
 
      Log.d(TAG, "Message: " + message); 
 

 
      if (from.startsWith("/topics/")) { 
 
       // message received from some topic. 
 
      } else { 
 
       // normal downstream message. 
 
      } 
 

 
      // [START_EXCLUDE] 
 
      /** 
 
      * Production applications would usually process the message here. 
 
      * Eg: - Syncing with server. 
 
      *  - Store message in local database. 
 
      *  - Update UI. 
 
      */ 
 

 
      /** 
 
      * In some cases it may be useful to show a notification indicating to the user 
 
      * that a message was received. 
 
      */ 
 
      sendNotification(message); 
 
      // [END_EXCLUDE] 
 
     } 
 
     // [END receive_message]

Sau đó, đăng ký nhận của bạn trong thẻ AndroidManifest.xml để lắng nghe trên thông báo đến:

<!-- [START gcm_listener] --> 
    <service 
     android:name="gcm.play.android.samples.com.gcmquickstart.MyGcmListenerService" 
     android:exported="false" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     </intent-filter> 
    </service> 
    <!-- [END gcm_listener] --> 

Bằng cách này - bạn sẽ không phải để xử lý tin nhắn gửi đến riêng cho trường hợp khi ứng dụng là trong foreground so với nền.

https://developers.google.com/cloud-messaging/

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