2017-03-03 9 views
7

私は、アプリケーションがフォアグラウンドとバックグラウンド(履歴ではない)の両方にいる間、ヘッドアップ通知を表示する必要があります。アプリがフォアグラウンドにいない間に、Firebase Cloud Messaging(通知)を使用してアンドロイドで通知を受信する方法を教えてください。

前景の場合、私はこれを次の方法で達成しました。

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

しかし、バックグラウンドで、それは常に通知に示すarea.Can誰もがバックグラウンドで(ない歴史の中で)これをacheiveする方法

を教えてくれ、私は、通知のために、以下のパラメータを試みたが、動作していません。

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

こんにちは。「*背景(歴史にない)*」とは、アプリが殺されたことを意味しますか? –

答えて

2

Firebaseは、データメッセージが使用されたときに通知のカスタマイズを許可します。バックグラウンドでアプリがカスタム通知を作成する場合でも、データメッセージはonMessageReceived()メソッドを呼び出します。

あなたが)代わりにsetFullScreenIntentを(使用してのデータの通知 Firebase notifications

+0

しかし、私たちがデータメッセージを使用すると、私たちはバックグラウンドからアプリをクリアしても通知を受け取ることができません。 – SachinS

+0

最近のアプリからアプリを削除してもデータメッセージの通知を受け取ります – Neha

+0

私は通知メッセージとデータメッセージを試しました.ITは動作していません。ドキュメントには「アプリがバックグラウンドになると、Androidはシステムトレイに通知メッセージを送ります。ユーザーが通知をタップすると、デフォルトでアプリランチャーが開きます。 – SachinS

0

についての詳細を知るには、このリンクの参照を取ることができ、これを試してみてください。

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); 

編集:背景のためにあなたがsimillar行う必要があります。ヘッドアップ通知を表示するには、優先度+音や振動(好ましくは両方)の組み合わせが必要です。

EDIT2:ここ好ましくはあなたがonMessageReceivedでこの通知を表示することができます()メソッド、:https://firebase.google.com/docs/cloud-messaging/android/receive#override-onmessagereceived

0

あなたは完全にあなたのJSONからの通知部分を削除し、データだけを使用する必要があります!それはトリックです。 私はこれを意味する:あなたはJSONで通知タグを持っている場合

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

は、時々ライブラリは、通知自体を処理することを決定しました。あなたのアプリがフォアグラウンドにあるときは、メッセージ受信機に電話をかけずに通知自体を表示します。

通知を削除して、常にデータタグを使用してください。

それは作品の両方のアプリが

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

チェックこれをフォアグラウンド/バックグラウンドで動作しているか、殺され、停止したとき:はあなたが同じように、あなたのリスナー・サービスを追加する必要がありCreate Heads-Up Display

+0

ようこそスタックオーバーフロー!これは理論的に質問に答えるかもしれませんが、答えの本質的な部分をここに含め、参照のためのリンクを提供することが望ましいです(// meta.stackoverflow.com/q/8259)。 –

0

標準的なGCM実装。


             
  
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]

次に、入ってくる通知をリッスンするのAndroidManifest.xmlタグであなたのレシーバを登録します。

<!-- [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] --> 

この道を - アプリがフォアグラウンドにあるとき、あなたはケースごとに個別の着信メッセージを処理する必要はありませんvs背景。

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

関連する問題