我正在开发聊天应用程序,我使用Firebase
进行推送通知。
在Background
和Foreground
中,方法DidReceiveRemoteNotification()
运行良好。
但是当Foreground
中的应用程序出现时,我不想显示Firebase notification
,因为它使用户感到烦恼。我只想在应用程序收到Firebase notification
并且不显示Firebase notification
时处理事件。
我尝试在alert-title
的配置中删除2个参数alert-body
和Firebase
:
第一:http://{url}/demo?device-token={token}&alert-title={title}&alert-body={body}
稍后:http://{url}/demo?device-token={token}
更改Firebase
的配置后,在应用程序关闭时我无法按Firebase notification
。
因此,我必须使用First
配置。
=>在Firebase notification
上Foreground
中的应用程序如何不显示Xamarin iOS
?
这是我的代码:
public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
{
try
{
// App in Foreground
if (!_isInBackground)
{
// Foreground
if (userInfo?.ContainsKey(new NSString("payload")) == true)
{
// TODO: handle Foreground
return;
}
}
// App in Background
// Checking push notification message
if (userInfo?.ContainsKey(new NSString("payload")) == true)
{
var payload = userInfo[new NSString("payload")]?.ToString();
if (!string.IsNullOrEmpty(payload))
{
// TODO: handle Background
}
// Push notification message
PushNotificationManager.DidReceiveMessage(userInfo);
// Inform system of fetch results
completionHandler(UIBackgroundFetchResult.NewData);
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
请帮助我!
答案 0 :(得分:1)
在应用程序处于前台时显示/隐藏通知的一种可能方法是在AppDelegate FinishLaunching方法中设置UNNotificationPresentationOptions。
默认情况下,当应用程序位于前台时,UNNotificationPresentationOptions设置为“无”,导致当应用程序不在前台时通知不会显示。但是对于您的情况,似乎将其设置为“无”以外的其他值。
UNNotificationPresentationOptions定义为
public enum UNNotificationPresentationOptions
{
Alert, //Display the notification as an alert, using the notification text.
Badge, //Display the notification badge value in the application's badge.
None, //No options are set.
Sound //Play the notification sound.
}
//要设置警报
FirebasePushNotificationManager.CurrentNotificationPresentationOption = UNNotificationPresentationOptions.Alert;
//您也可以将它们组合
FirebasePushNotificationManager.CurrentNotificationPresentationOption = UNNotificationPresentationOptions.Alert | UNNotificationPresentationOptions.Badge;
参考: https://github.com/CrossGeeks/FirebasePushNotificationPlugin/issues/6
答案 1 :(得分:0)
来自FCM document about receiving message,
在iOS 10及更高版本中,您可以将UNUserNotificationCenter委托设置为从Apple接收显示通知,而FIRMessaging的委托属性为从FCM接收数据消息。如果您未使用AppDelegate设置这两个委托,则禁用消息处理的刷新方法。您需要致电appDidReceiveMessage:来跟踪邮件的传递和分析。
// Receive displayed notifications for iOS 10 devices.
// Handle incoming notification messages while app is in the foreground.
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
NSDictionary *userInfo = notification.request.content.userInfo;
// With swizzling disabled you must let Messaging know about the message, for Analytics
// [[FIRMessaging messaging] appDidReceiveMessage:userInfo];
// Print message ID.
if (userInfo[kGCMMessageIDKey]) {
NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
}
// Print full message.
NSLog(@"%@", userInfo);
// Change this to your preferred presentation option
completionHandler(UNNotificationPresentationOptionNone);
}
因此,您可以更改在应用程序处于前台时收到的消息时显示的内容(或不发出警报)。如果completionHandler
设置为UNNotificationPresentationOptionNone
,则不会发出警报。您可以尝试使用这种方式。