我已经尝试了一些来自堆栈溢出的解决方案。但在我的情况下无法正常工作。以下是我的MyFirebaseMessagingService
课,它扩展了FirebaseMessagingService
public class MyFirebaseMessagingService extends FirebaseMessagingService {
String url , title , body ;
Map<String,String> data = new HashMap<>();
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
title = remoteMessage.getNotification().getTitle();
body = remoteMessage.getNotification().getBody();
if(remoteMessage.getData().size()>0){
Log.d("DATA", remoteMessage.getData().toString());
try{
data = remoteMessage.getData();
url = data.get("url");
}
catch (Exception e){
Log.e("Error", e.toString());
}
showNotification(url , title , body);
}
}
private void showNotification(String url, String title, String body) {
Intent intent = new Intent(this, NotificationViewer.class);
intent.putExtra("URL",url);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) ;
notificationBuilder.setContentTitle(title);
notificationBuilder.setContentText(body);
notificationBuilder.setAutoCancel(true);
notificationBuilder.setSmallIcon(R.drawable.logo);
notificationBuilder.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0,notificationBuilder.build());
}
}
以下是我的AndroidManifest.xml
代码。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="dcastalia.com.munshijobsportal">
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:name=".Controller.AppController"
android:allowBackup="true"
android:icon="@drawable/logo"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".activity.SplashActivity"
android:noHistory="true"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".firebase.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<service android:name=".firebase.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<activity android:name=".activity.NotificationViewer"
android:exported="true">
</activity>
</application>
</manifest>
我已经尝试了一些解决方案,但在我的情况下不起作用。当应用程序处于前台但在后台无法正常工作时,一切正常。我想在用户单击通知时打开NotificationViewer.Java
活动的特定活动名称。但是当我的应用程序在后台运行时,它会继续打开我的启动器活动。
您需要在通知请求中的 json 有效负载中设置单击操作 "click_action" => "您的标签"并在清单活动中应用相同的标签
<activity
android:name=".activity.NotificationViewer">
<intent-filter>
<action android:name="YourTAG" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
您很可能使用的是 Firebase通知消息,而不是数据消息。
如果是这种情况,使用数据FCM 消息应该可以为您解决问题。
从 https://firebase.google.com/docs/cloud-messaging/concept-options 可以看出
如果您希望 FCM 代表客户端应用处理显示通知,请使用通知消息。如果要在客户端应用上处理消息,请使用数据消息。
通知消息:
当应用程序位于前台时,它会接收有效负载,但在后台时,通知消息将传递到通知托盘。
数据消息: 这些始终交付给应用程序,无论它是在前台还是在后台。
注意:仅 FCM 数据消息不会将您的应用程序置于前台。您将需要额外的代码,以便在收到数据电文时执行此操作。