我有以下代码。当用户在后台或关闭应用程序时点击推送通知时,MainActivity。OnNewIntent被调用,但意图缺少处理推送通知时放入的额外内容。如果单击通知时应用程序处于前台,则intent参数具有额外功能,并得到正确处理。
[Service]
[IntentFilter(new[] {"com.google.firebase.MESSAGING_EVENT"})]
[IntentFilter(new[] {"com.google.firebase.INSTANCE_ID_EVENT"})]
public class MyFirebaseMessagingService : FirebaseMessagingService
{
public override void OnMessageReceived(RemoteMessage message)
{
var intent = new Intent(this, typeof(MainActivity));
intent.PutExtra("source", "notification");
intent.PutExtra("title", message.GetNotification()?.Title ?? "");
intent.PutExtra("body", message.GetNotification()?.Body ?? "");
foreach (var extra in message.Data)
{
intent.PutExtra(extra.Key, extra.Value);
}
string category = "Miscellaneous";
if (message.Data.ContainsKey("category")
&& !string.IsNullOrWhiteSpace(message.Data["category"]))
{
category = message.Data["category"];
}
intent.AddFlags(ActivityFlags.ClearTop);
var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);
var notificationBuilder = new NotificationCompat.Builder(this, category);
notificationBuilder.SetContentTitle(message.GetNotification()?.Title)
.SetSmallIcon(Resource.Drawable.notificationicon)
.SetContentText(message.GetNotification()?.Body)
.SetAutoCancel(true)
.SetShowWhen(false)
.SetPriority(1)
.SetContentIntent(pendingIntent)
.SetCategory(category)
.SetChannelId(category);
var notificationManager = NotificationManager.FromContext(this);
notificationManager.Notify(0, notificationBuilder.Build());
}
}
我的MainActivity的OnNewIntent方法如下:
protected override async void OnNewIntent(Intent intent)
{
base.OnNewIntent(intent);
if (intent.Extras != null
&& intent.Extras.ContainsKey("source")
&& "notification".Equals((string)intent.Extras.Get("source")))
{
this.GetLog().Info("Houston, we have liftoff!");
}
}
当应用程序打开时用户单击推送通知时,我们点击日志消息。当用户在应用关闭时或在后台单击时,不会因为意图而点击它。附加内容为空。我找不到任何有帮助的文章或问题。思潮?
更新:
当应用程序在Firebase中处于后台时如何处理通知
这个问题让我半途而废。通过在从服务器发送消息时删除json中的通知对象,我现在可以在应用程序处于后台时处理通知。但当它完全关闭时仍然不行。
这里发生了一些问题。
我只是确保通知的 json 不包含通知 {} 对象,只包含数据 {} 对象。
我删除了启动活动(如果可以通过启动活动完成此操作,我将使用更新的答案进行报告
我使用了以下代码:
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override async void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App(GetType().Assembly, GetIntentExtras()));
// THIS LINE IS THE KEY TO GETTING THE EXTRAS WHEN THE APP IS FIRST OPENING, SUCH AS WHEN CLICKING ON A PUSH NOTIFICATION
// THIS LINE'S LOCATION IS IMPORTANT- ANY HIGHER AND IT WILL NOT HAVE THE EXTRAS YET
await ProcessIntent(Intent);
}
protected override async void OnNewIntent(Intent intent)
{
base.OnNewIntent(intent);
await ProcessIntent(intent);
}
private async Task ProcessIntent(Intent intent)
{
if (intent.Extras != null
&& intent.Extras.ContainsKey("source")
&& "notification".Equals((string)intent.Extras.Get("source")))
{
this.GetLog().Info("Houston, we have liftoff!");
}
}
}
我已经在我的应用程序上实现了推送通知,它们工作得很好。我遇到的问题是,当我点击下拉菜单中的它们时,它们会立即重新加载应用程序。为了解决这个问题,我让应用程序创建了一个新的活动实例。这现在打开了一个新的页面,但当点击从这个新的页面返回时,它有同样的问题,并重新加载整个应用程序。
我正在尝试构建一个实时聊天应用程序。 我已经整合了https://pub.dev/packages/flutter_local_notifications用于推送通知的软件包,这是有效的。 我没有使用Firebase,我正在使用我自己的自定义后端,使用https://socket.io/进行实时聊天。 我想在用户发送聊天信息时接收推送通知。推送通知在应用程序处于前台或后台时起作用。但是,当我从进程
当应用程序在后台时,如何更新包含数据负载的Firebase推送通知?有没有办法在通知中指定通知id给Firebase API? 完整的项目在github https://github.com/akshatashan/FireBaseCloudMessagingDemo中
index.js中的代码 bgmessaging.js中的代码负责应用程序在后台时的推送 为了在应用程序处于前台时带来图像,我使用了下面的代码:-
我的应用程序有推送通知(FCM)。当应用程序在前台运行时,我可以在onMessageReceived()函数中获取数据负载。当应用程序在后台运行或应用程序完全关闭时,不会调用onMessageReceived()函数。我的问题是,当app在后台或关闭时,是否可能获得数据有效载荷? 提前道谢!
我想为一个聊天应用程序实现FCM推送通知服务,我遵循Firebase文档中的步骤,当通知从Firebase控制台发送到我的设备时,我会得到通知。当我尝试使用http post to https://FCM.googleapis.com/FCM/send通过FCM将通知通过服务器端发送到设备时: 当应用程序处于活动状态并且我正在将此通知发送到我的设备时,Im在我的控制台日志中收到以下消息,所以我认为