当应用程序在Xamarin iOS上的Foreground中时,如何不显示Firebase通知?

时间:2019-09-26 16:51:22

标签: xamarin xamarin.forms xamarin.ios

我正在开发聊天应用程序,我使用Firebase进行推送通知。

BackgroundForeground中,方法DidReceiveRemoteNotification()运行良好。

但是当Foreground中的应用程序出现时,我不想显示Firebase notification,因为它使用户感到烦恼。我只想在应用程序收到Firebase notification并且不显示Firebase notification时处理事件。

Firebase_push_notification

我尝试在alert-title的配置中删除2个参数alert-bodyFirebase

第一http://{url}/demo?device-token={token}&alert-title={title}&alert-body={body}

稍后http://{url}/demo?device-token={token}

更改Firebase的配置后,在应用程序关闭时我无法按Firebase notification

因此,我必须使用First配置。

=>在Firebase notificationForeground中的应用程序如何不显示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);
        }
    }

请帮助我!

2 个答案:

答案 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,则不会发出警报。您可以尝试使用这种方式。

  

UNNotificationPresentationOptionNone:没有警报。