2017-05-14 14 views
0

通知とデータペイロードの両方を持つFirebaseメッセージの受信に関する質問があります。 documentationは、データが「意図の余分に」到着すると述べています。AndroidアプリケーションのFirebase Cloud Messagingのデータペイロード(inc。通知)の処理/処理方法は?

私の質問はです。意図(またはアクティビティ)?アプリをバックグラウンドに切り替えるときにユーザーが中断した画面が表示されます。だから、私はアプリケーションのすべてのインテント/アクティビティのためにエクストラを取得しようとする必要がありますか?

アプリケーションがフォアグラウンドになったら、どこでどのようにデータペイロードを取得するように実際にコードするのですか?

ありがとうございます!

を追加しました:

私が意味する、私は10+活動を持っているalraedy、アプリが終了すると、よりがあるでしょう。では、すべてのアクティビティのExtraを取得して、アプリがプッシュデータペイロードで再開されたかどうかを確認する必要がありますか?

+0

回答を更新して、デフォルトの動作を上書きする方法の説明を追加しました。 –

答えて

2

、それは述べて:通知とデータペイロードの両方を持つ

メッセージ、背景と フォアグラウンドの両方を。この場合、通知が デバイスのシステムトレイに配信され、データペイロードはエキストラであなたランチャー活動の意図

ランチャー活性は、カテゴリを使用して、マニフェストで指定されているの 送達されますLAUNCHER。例:

<activity 
     android:name="com.example.MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

デフォルトの動作を上書きして、別の動作を指定できます。 message notification dataには、値がアクション文字列の値click_actionを追加します。次に、アクティビティを作成し、アクションに一致するマニフェストにインテントフィルタを与えます。例えば、メッセージで:

{ 
    "to": "dhVgCGVkTSR:APA91b...mWsm3t3tl814l", 
    "notification": { 
    "title": "New FCM Message", 
    "body": "Hello World!", 
    "click_action": "com.example.FCM_NOTIFICATION" 
    }, 
    "data": { 
    "score": "123" 
    } 
} 

このようなインテントフィルタを定義:

<activity android:name=".MyFcmNotificationActivity"> 
     <intent-filter> 
      <action android:name="com.example.FCM_NOTIFICATION" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

およびドキュメントを少し明確にするために、データペイロードは、メッセージが受信されたアクティビティに配信されません。ユーザーが通知をクリックすると配信されます。

1

FirebaseMessagingServiceクラスを拡張する必要があります。

onMessageReceivedメソッドをオーバーライドします。

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
// ... 

// TODO(developer): Handle FCM messages here. 

Log.d(TAG, "From: " + remoteMessage.getFrom()); 

// Check if message contains a data payload. 
if (remoteMessage.getData().size() > 0) { 
    Log.d(TAG, "Message data payload: " + remoteMessage.getData()); 

    if (/* Check if data needs to be processed by long running job */ true) { 
     // For long-running tasks (10 seconds or more) use Firebase Job Dispatcher. 
     scheduleJob(); 
    } else { 
     // Handle message within 10 seconds 
     handleNow(); 
    } 

} 

// Check if message contains a notification payload. 
if (remoteMessage.getNotification() != null) { 
    Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); 
} 

// Also if you intend on generating your own notifications as a result of a received FCM 
// message, here is where that should be initiated. See sendNotification 
method below. 
} 

サービスをマニフェストに登録してください。あなたは、あなたの質問にリンクされたドキュメントで

+0

私はすでにこれを行っています。しかし、ペイロードにデータと通知の両方が含まれている場合は、onMessageReceivedには到着しませんが、「インテントの余分な部分」になることがドキュメントに記載されています。 – ikevin8me

関連する問題