警告CS0618:“ UIAlertView.UIAlertView(字符串,字符串,UIAlertViewDelegate,字符串,参数字符串[])”已过时

时间:2019-07-25 13:10:21

标签: c# xamarin.ios

我使用此代码在iOS上接收推送通知。该代码有效,但是我在这一行收到警告:

new UIAlertView("Error registering push notifications", error.LocalizedDescription, null, "OK", null).Show();
  

警告CS0618:'UIAlertView.UIAlertView(string,string,UIAlertViewDelegate,string,params string [])'已过时:'对IUIAlertViewDelegate参数使用重载'

是否仍然可以使用FailedToRegisterForRemoteNotifications(UIApplication application, NSError error)?我应该更改我的代码吗?

using System;
using Foundation;
using UIKit;
using Xamarin.Forms;

namespace InapppurchaseTest.iOS
{
[Register("AppDelegate")]
class Program : UIApplicationDelegate
{
    private static Game1 game;

    internal static void RunGame()
    {
        game = new Game1();
        game.Run();
    }

    static void Main(string[] args)
    {           
        UIApplication.Main(args, null, "AppDelegate");
    }

    public override void FinishedLaunching(UIApplication app)
    {
        global::Xamarin.Forms.Forms.Init();
        if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0))
        {
            var authOptions = UserNotifications.UNAuthorizationOptions.Alert | UserNotifications.UNAuthorizationOptions.Badge | UserNotifications.UNAuthorizationOptions.Sound;
            UserNotifications.UNUserNotificationCenter.Current.RequestAuthorization(authOptions, (granted, error) =>
            {
                Console.WriteLine(granted);
            });
            UIApplication.SharedApplication.RegisterForRemoteNotifications();
        }
        else if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
        {
            var settings = UIUserNotificationSettings.GetSettingsForTypes(UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, new NSSet());
            UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);
            UIApplication.SharedApplication.RegisterForRemoteNotifications();
        }
        else
        {
            var notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound;
            UIApplication.SharedApplication.RegisterForRemoteNotificationTypes(notificationTypes);
        }

        RunGame();
    }

    public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
    {
        // Get current device token
        var DeviceToken = deviceToken.Description;

        if (!string.IsNullOrWhiteSpace(DeviceToken))
        {
            DeviceToken = DeviceToken.Trim('<').Trim('>');
        }

        // Get previous device token
        var oldDeviceToken = NSUserDefaults.StandardUserDefaults.StringForKey("PushDeviceToken");

        // Has the token changed?
        if (string.IsNullOrEmpty(oldDeviceToken) || !oldDeviceToken.Equals(DeviceToken))
        {
            //TODO: Put your own logic here to notify your server that the device token has changed/been created!
        }

        // Save new device token
        NSUserDefaults.StandardUserDefaults.SetString(DeviceToken, "PushDeviceToken");
    }

    public override void FailedToRegisterForRemoteNotifications(UIApplication application, NSError error)
    {
        new UIAlertView("Error registering push notifications", error.LocalizedDescription, null, "OK", null).Show();
    }

    public override void ReceivedRemoteNotification(UIApplication application, NSDictionary userInfo)
    {
        ProcessNotification(userInfo, false);
    }
    void ProcessNotification(NSDictionary options, bool fromFinishedLaunching)
    {
        // Check to see if the dictionary has the aps key.  This is the notification payload you would have sent
        if (null != options && options.ContainsKey(new NSString("aps")))
        {
            //Get the aps dictionary
            NSDictionary aps = options.ObjectForKey(new NSString("aps")) as NSDictionary;

            string alert = string.Empty;

            if (aps.ContainsKey(new NSString("alert")))
                alert = (aps[new NSString("alert")] as NSString).ToString();

            if (!fromFinishedLaunching)
            {
                //Manually show an alert
                if (!string.IsNullOrEmpty(alert))
                {
                    NSString alertKey = new NSString("alert");
                    UILocalNotification notification = new UILocalNotification();
                    notification.FireDate = NSDate.Now;
                    notification.AlertBody = aps.ObjectForKey(alertKey) as NSString;
                    notification.TimeZone = NSTimeZone.DefaultTimeZone;
                    notification.SoundName = UILocalNotification.DefaultSoundName;
                    UIApplication.SharedApplication.ScheduleLocalNotification(notification);
                }
            }
        }
    }
}
}

1 个答案:

答案 0 :(得分:0)

如果要删除此警告,请添加[Obsolete] berfore方法,如下所示:

[Obsolete]
public override void FailedToRegisterForRemoteNotifications(UIApplication application, NSError error)
{
    new UIAlertView("Error registering push notifications", error.LocalizedDescription, null, "OK", null).Show();
}

顺便说一下,来自文档Displaying Alerts in Xamarin.iOS

  

从iOS 8开始,UIAlertController已完成替换UIActionSheet和U​​IAlertView的功能,而这两个功能现已弃用。

然后您可以使用UIAlertController来实现这一点:

//Create Alert
var okAlertController = UIAlertController.Create("Title", "The message", UIAlertControllerStyle.Alert);

//Add Action
okAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));

// Present Alert
PresentViewController(okAlertController, true, null);