收到Firebase通知时,即使应用处于后台也如何打开活动

时间:2020-06-23 09:21:36

标签: android firebase-cloud-messaging

我要打开呼叫以接听或拒绝Firebase通知接收的呼叫。但是当应用程序处于前台状态但应用程序处于后台时,它会打开活动,通知日志显示但从未调用活动。

公共类FirebaseNotificationService扩展了FirebaseMessagingService {

private static final String TAG = "Firebase";
private int remedyNotificationID = 0;
NotificationManager notificationManagerRemedy;

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    Log.e(TAG, "Notification Received ");
    Map<String, String> data = null;
    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.e(TAG, "Notification Received: " + remoteMessage.getData());
        data = remoteMessage.getData();
    }
    if (data != null) {
        Intent intent = new Intent(getApplicationContext(), IncomingVideoCallActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("user_id", data.get("user_id"));
        bundle.putString("user_full_name", data.get("user_full_name"));
        intent.putExtras(bundle);
        startActivity(intent);
    }
}

}

1 个答案:

答案 0 :(得分:0)

消息有两种类型:数据消息和通知消息 消息。数据消息被处理 在onMessageReceived中,这里的应用程序是前台还是后台。数据消息是类型 传统上用于GCM。仅在应用程序在onMessageReceived处收到通知消息 在前台。当应用程序在后台运行时,将显示自动生成的通知。 当用户点击通知时,他们将返回到应用程序。包含两个通知的消息 数据有效载荷被视为通知消息。 Firebase控制台始终发送通知 消息。

示例代码:- 您需要像这样在通知有效负载中指定click_action

$noti = array
    (
    'icon' => 'new',
    'title' => 'title',
    'body' => 'new msg',
    'click_action' => 'open IncomingVideoCallActivity'
); 

现在manifest文件中的IncomingVideoCallActivity活动标签中执行此操作

         <activity
               android:name=".IncomingVideoCallActivity">
                <intent-filter>
                    <action android:name="open IncomingVideoCallActivity" /> // should be same as in click action
                   <category android:name="android.intent.category.DEFAULT"/>
               </intent-filter>
        </activity>