Центр приложений Visual Studio: оператор 'await' может использоваться только внутри асинхронного метода - PullRequest
0 голосов
/ 15 марта 2019

Мне нужна помощь с push-уведомлениями App Center.Я хочу выяснить, включил или отключил пуш-уведомления пользователь на своем устройстве iOS / Android.Эта задача должна быть выполнена при запуске приложения.Я следовал этому учебному руководству Центра приложений, но получаю сообщение об ошибке, когда проверяю, включены ли push-уведомления.

Учебное пособие Центра приложений

Ошибка CS4033:Оператор 'await' может использоваться только внутри асинхронного метода.Попробуйте пометить этот метод модификатором async и изменить его тип возвращаемого значения на Task.

Что не так?Как я могу узнать, включил или отключил пуш-уведомления пользователь?

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 голосов
/ 15 марта 2019

Ключевое слово await может использоваться только в асинхронном методе, но этот метод является переопределением, поэтому вы не можете преобразовать его в задачу.

В любом случае вы можете написать строковый код, в котором вы используете асинхронный режим, например так:

bool isEnabled = await Push.IsEnabledAsync().Result;
0 голосов
/ 15 марта 2019

Метод, который использует await, должен быть помечен как async. Попробуйте добавить ключевое слово async до void FinishedLaunching:

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