2016-09-06 92 views
0

我正在從Firebase向我的Android應用程序發送推送通知。但是當我的應用程序在後臺firebase時,onMessageReceived方法不會被調用,而是firebase發送通知給系統,以便在系統托盤中顯示通知。通知出現在系統托盤中,但沒有通知聲音,即使我已在系統設置中允許我的應用程序發出通知聲音。 這是我的通知 代碼謝謝在Android背景下從firebase發送通知時沒有通知聲音和振動和指示燈

private void sendNotification(String msg, String title) { 
    NotificationManager mNotificationManager = (NotificationManager) 
      this.getSystemService(Context.NOTIFICATION_SERVICE); 

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
      new Intent(this, MainActivity.class), 0); 
    Intent i = new Intent(this,MainActivity.class); 
    i.putExtra("",""); 

    NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(this) 
        .setSmallIcon(R.mipmap.ic_launcher) 
        .setContentTitle(title) 
        .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) 
        .setContentText(msg); 
    //Vibration 
    mBuilder.setVibrate(new long[] { 200, 400, 600, 800, 1000 }); 

    //LED 
    mBuilder.setLights(Color.MAGENTA, 1000, 1000); 

    //Ton 
    mBuilder.setSound(Uri.parse("android.resource://" 
      + getApplicationContext().getPackageName() + "/" + R.raw.circles_notif)); 
    mBuilder.setContentIntent(contentIntent); 
    mNotificationManager.notify(0, mBuilder.build()); 
} 
+0

是否定義了Android權限的AndroidManifest使用振動?:'<使用許可權的android:NAME =「android.permission.VIBRATE」 />' – GeorgeLBA

+0

是的,這不是我的問題,當我點擊buton測試它的工作,但在後臺無法正常工作 – Mohamed

+0

您是否嘗試過使用NotificationCompat中的'setDefaults(DEFAULT_ALL)'來檢查它是否適用於用戶的默認偏好?並移除您爲測試而定義的振動,光線和聲音。希望這會有所幫助 – GeorgeLBA

回答

3

從您的火力控制檯轉到通知>新消息>高級選項和發送通知的自定義數據。使用'title'和'body'作爲Key,並將其值作爲您希望在通知中顯示它們的值。這應該在應用程序處於後臺或死亡時調用onMessageReceived()。

如果你是從你自己的服務器發送通知,這裏是一個示例JSON部分:

{ 
    "data": { 
     "title": "notification_title", 
     "body": "notification_body" 
    }, 
    "to" : "jh578_gsh....jhHGFJ76FH" 
} 
+0

hello @sudip當我在forground上的應用程序不想收到一個notif – Mohamed

+0

我沒有太多關於它的實際經驗,但你可以按照下面的鏈接:http://stackoverflow.com/questions/ 5504632 /如何-可以-I-告訴-IF-Android的應用程序,被運行 - 在最前臺。看起來它可能提供您正在尋找的解決方案。 –

1

這是寫在override sample of onMessageReceived(),第二註釋行說:

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    ... 
    Not getting messages here? See why this may be: ...goo.gl/39bRNJ 
    ... 
} 

看到comment-link

解決方案,如相關問題的答案:How to handle notification when app in background in Firebase,可以在Messages with both notification and data payloads部,其說,文檔中找到:

接收消息,其中包括二者通知和數據有效載荷時

應用行爲取決於該應用是否是在背景或前景基本上,無論是否它在收到時處於活動狀態。

  • 當在後臺,應用接收在通知托盤中的通知有效載荷,並且當用戶點按通知僅處理所述數據有效負載。
  • 當在前臺中時,您的應用程序將收到一個消息對象,其中包含兩個有效負載。