Visual Studio App Center:“ await”运算符只能在异步方法中使用

时间:2019-03-15 14:36:02

标签: c# xamarin.android xamarin.ios monogame visual-studio-app-center

我需要有关App Center推送通知的帮助。我想了解用户是否在其iOS / Android设备上启用或禁用了推送通知。在应用程序启动时应完成此任务。我遵循了此App Center教程,但是在检查是否启用或禁用推送通知时收到错误消息。

App Center tutorial

  

错误CS4033:“ await”运算符只能在异步中使用   方法。考虑使用“异步”修饰符标记此方法,然后   将其返回类型更改为“任务”。

怎么了?如何确定用户是否启用或禁用了推送通知?

using Foundation;
using UIKit;
using Microsoft.AppCenter;
using Microsoft.AppCenter.Analytics;
using Microsoft.AppCenter.Crashes;
using Microsoft.AppCenter.Push;

namespace iosprojectnew.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)
        {      
            if (!AppCenter.Configured)
            {
                bool isEnabled = await Push.IsEnabledAsync();

                Push.PushNotificationReceived += (sender, e) =>
                {
                    // Add the notification message and title to the message
                    var summary = $"Push notification received:" +
                                        $"\n\tNotification title: {e.Title}" +
                                        $"\n\tMessage: {e.Message}";

                    // If there is custom data associated with the notification,
                    // print the entries
                    if (e.CustomData != null)
                    {
                        summary += "\n\tCustom data:\n";
                        foreach (var key in e.CustomData.Keys)
                        {
                            summary += $"\t\t{key} : {e.CustomData[key]}\n";
                        }
                    }

                    // Send the notification summary to debug output
                    System.Diagnostics.Debug.WriteLine(summary);
                };
            }


            AppCenter.Start("...", typeof(Analytics), typeof(Crashes), typeof(Push));
            RunGame();
        }
    }
}

2 个答案:

答案 0 :(得分:0)

使用await的方法必须标记为async。尝试在async之前添加void FinishedLaunching关键字:

public override async void FinishedLaunching(UIApplication app) { ... }

答案 1 :(得分:0)

await关键字只能用于异步方法,但是此方法是替代方法,因此您不能转换为任务。

无论如何,您都可以在使用异步的地方编写行代码,如下所示:

bool isEnabled = await Push.IsEnabledAsync().Result;