我要打开呼叫以接听或拒绝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);
}
}
}
答案 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>