未为 Launcher 应用程序设置待定 Intent Extra
Pending Intent Extras are not set for Launcher Application
我创建了一个名为 HomeActivity
的 Launcher 应用程序,它有一个 LaunchMode = SingleTask
、CATEGORY_HOME
和 CATEGORY_LAUNCHER
。 activity 又会启动新的活动和一些其他应用程序。
activity 与 Firebase 消息服务连接以获取推送通知。 Firebase 服务添加了一些附加功能(从推送通知中收集并在 HomeActivity
中的附加功能中发送它们
public override void OnMessageReceived(RemoteMessage message)
{
Notification.Builder builder = new Notification.Builder(this);
builder.SetSmallIcon(Resource.Drawable.Icon);
Intent intent = new Intent(this, typeof(HomeActivity));
intent.AddFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop);
intent.PutExtra(General.UPDATE_NOTIFIED, true);
if(message.Data != null)
{
if (message.Data.Any())
{
foreach(KeyValuePair<string,string> kv in message.Data)
{
intent.PutExtra(kv.Key, kv.Value);
}
}
}
PendingIntent pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.UpdateCurrent);
builder.SetContentIntent(pendingIntent);
builder.SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.app_logo));
builder.SetContentTitle(message.GetNotification().Title);
builder.SetContentText(message.GetNotification().Body);
builder.SetDefaults(NotificationDefaults.Sound);
builder.SetAutoCancel(true);
NotificationManager notificationManager = (NotificationManager)GetSystemService(NotificationService);
notificationManager.Notify(1, builder.Build());
}
每当 HomeActivity
位于顶部并且收到并单击推送通知时,我可以访问 HomeActivity
的 OnResume
功能中的附加功能(我已覆盖 OnNewIntent(Intent intent)
).
protected override void OnNewIntent(Intent intent)
{
bool updateNotification = intent.GetBooleanExtra(General.UPDATE_NOTIFIED, false); //Check if Extra is set
this.Intent = intent;
base.OnNewIntent(intent);
}
但是当我在另一个由 HomeActivity
启动的 activity 中并单击推送通知时;该应用程序对 HomeActivity
执行 return,但 Intent
.
中没有附加功能
我试过各种Flags,包括但不限于NewTask
、ClearTask
我仍然无法理解为什么在另一个 activity 到位时单击通知时没有设置附加功能。我在这里错过了什么。
好的,我知道问题出在哪里了。
Firebase 系统将不会 触发 OnMessageReceived
方法,如果你 post 带有数据的通知(即显示消息)。
需要做的是只有推送通知中的data
有效载荷会触发负责设置数据的OnMessageRecieved
函数。
所以通知应该是这样的
{
to: "topic | Registered device",
data:{
data1: "data_value1",
data2: "data_value2",
data3: "data_value3",
}
}
我创建了一个名为 HomeActivity
的 Launcher 应用程序,它有一个 LaunchMode = SingleTask
、CATEGORY_HOME
和 CATEGORY_LAUNCHER
。 activity 又会启动新的活动和一些其他应用程序。
activity 与 Firebase 消息服务连接以获取推送通知。 Firebase 服务添加了一些附加功能(从推送通知中收集并在 HomeActivity
public override void OnMessageReceived(RemoteMessage message)
{
Notification.Builder builder = new Notification.Builder(this);
builder.SetSmallIcon(Resource.Drawable.Icon);
Intent intent = new Intent(this, typeof(HomeActivity));
intent.AddFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop);
intent.PutExtra(General.UPDATE_NOTIFIED, true);
if(message.Data != null)
{
if (message.Data.Any())
{
foreach(KeyValuePair<string,string> kv in message.Data)
{
intent.PutExtra(kv.Key, kv.Value);
}
}
}
PendingIntent pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.UpdateCurrent);
builder.SetContentIntent(pendingIntent);
builder.SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.app_logo));
builder.SetContentTitle(message.GetNotification().Title);
builder.SetContentText(message.GetNotification().Body);
builder.SetDefaults(NotificationDefaults.Sound);
builder.SetAutoCancel(true);
NotificationManager notificationManager = (NotificationManager)GetSystemService(NotificationService);
notificationManager.Notify(1, builder.Build());
}
每当 HomeActivity
位于顶部并且收到并单击推送通知时,我可以访问 HomeActivity
的 OnResume
功能中的附加功能(我已覆盖 OnNewIntent(Intent intent)
).
protected override void OnNewIntent(Intent intent)
{
bool updateNotification = intent.GetBooleanExtra(General.UPDATE_NOTIFIED, false); //Check if Extra is set
this.Intent = intent;
base.OnNewIntent(intent);
}
但是当我在另一个由 HomeActivity
启动的 activity 中并单击推送通知时;该应用程序对 HomeActivity
执行 return,但 Intent
.
我试过各种Flags,包括但不限于NewTask
、ClearTask
我仍然无法理解为什么在另一个 activity 到位时单击通知时没有设置附加功能。我在这里错过了什么。
好的,我知道问题出在哪里了。
Firebase 系统将不会 触发 OnMessageReceived
方法,如果你 post 带有数据的通知(即显示消息)。
需要做的是只有推送通知中的data
有效载荷会触发负责设置数据的OnMessageRecieved
函数。
所以通知应该是这样的
{
to: "topic | Registered device",
data:{
data1: "data_value1",
data2: "data_value2",
data3: "data_value3",
}
}