微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

本地通知不会在 xamarin ios 中第二次触发

如何解决本地通知不会在 xamarin ios 中第二次触发

我正在使用消息中心来发出通知。第一个工作正常。但第二个没有开火。

    MessagingCenter.Subscribe<string>(this,"iOSNotification",(value) =>
    {
        NotificationDelegate.RegisterNotification("Trip started");
    });
    MessagingCenter.Subscribe<string>(this,"IosNotMoved",(value) =>
    {
        NotificationDelegate.RegisterNotification("Would you like to stop trip?");
    });

public static void RegisterNotification(string notify)
{
UIlocalnotification notification = new UIlocalnotification();
notification.FireDate = NSDate.FromTimeIntervalSinceNow(1);
notification.AlertAction = "View Alert";
notification.AlertBody = notify;
UIApplication.SharedApplication.Schedulelocalnotification(notification);
}

解决方法

应在应用启动后立即请求通知权限,方法是将以下代码添加到 FinishedLaunchingAppDelegate 方法并设置所需的通知类型 (UNAuthorizationOptions):>

...
using UserNotifications;
...



 public override bool FinishedLaunching(UIApplication application,NSDictionary launchOptions)
   {
       ....
           
        //after iOS 10
        if(UIDevice.CurrentDevice.CheckSystemVersion(10,0))
        {
            UNUserNotificationCenter center = UNUserNotificationCenter.Current;

            center.RequestAuthorization(UNAuthorizationOptions.Alert | UNAuthorizationOptions.Sound | UNAuthorizationOptions.UNAuthorizationOptions.Badge,(bool arg1,NSError arg2) =>
                 {

                 });

            center.Delegate = new NotificationDelegate();
        }

        else if(UIDevice.CurrentDevice.CheckSystemVersion(8,0))
        {

            var settings = UIUserNotificationSettings.GetSettingsForTypes(UIUserNotificationType.Alert| UIUserNotificationType.Badge| UIUserNotificationType.Sound,new NSSet());

            UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);

        }

        return true;
    }

iOS 10 的新功能,当应用程序在前台并触发通知时,它可以以不同的方式处理通知。通过提供 UNUserNotificationCenterDelegate 并实现 UserNotificationCentermethod,应用可以接管显示通知的责任。例如:

using System;
using ObjCRuntime;
using UserNotifications;


namespace xxx
{
 public class NotificationDelegate:UNUserNotificationCenterDelegate
   {
    public NotificationDelegate()
    {
    }

    public override void WillPresentNotification(UNUserNotificationCenter center,UNNotification notification,Action<UNNotificationPresentationOptions> completionHandler)
    {
        // Do something with the notification
        Console.WriteLine("Active Notification: {0}",notification);

        // Tell system to display the notification anyway or use
        // `None` to say we have handled the display locally.
        completionHandler(UNNotificationPresentationOptions.Alert|UNNotificationPresentationOptions.Sound);
    }


    public override void DidReceiveNotificationResponse(UNUserNotificationCenter center,UNNotificationResponse response,Action completionHandler)
    {
        // Take action based on Action ID
        switch (response.ActionIdentifier)
        {
            case "reply":
                // Do something
                break;
            default:
                // Take action based on identifier
                if (response.IsDefaultAction)
                {
                    // Handle default action...
                }
                else if (response.IsDismissAction)
                {
                    // Handle dismiss action
                }
                break;
        }

        // Inform caller it has been handled
        completionHandler();
    }

  }
}

要在系统中创建和注册自定义操作,请使用以下代码:

 public void RegisterNotification(long time)
    {
        UNUserNotificationCenter center = UNUserNotificationCenter.Current;

        //creat a UNMutableNotificationContent which contains your notification content
        UNMutableNotificationContent notificationContent = new UNMutableNotificationContent();

        notificationContent.Title = "xxx";
        notificationContent.Body= "xxxx";

        notificationContent.Sound = UNNotificationSound.Default;

        UNTimeIntervalNotificationTrigger trigger = UNTimeIntervalNotificationTrigger.CreateTrigger(time,false);

        UNNotificationRequest request = UNNotificationRequest.FromIdentifier("FiveSecond",notificationContent,trigger);


        center.AddNotificationRequest(request,(NSError obj) => 
        {
           


        });

    }

当你调用这个方法时,例如:

RegisterNotification(20);//set the time you want to push notification

通知将在 20 秒后推送,如果您关闭应用程序。

您可以访问链接以获取更多信息和详细信息:MicroSoft Document

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。