Android pu sh уведомление от нажатия кнопки xamarin.forms зависает - PullRequest
0 голосов
/ 22 января 2020

Я медленно пытаюсь получить уведомления о pu sh и начать узнавать о них / внедрять их в приложение, которое я создаю.

Я прошел учебные курсы по настройке с помощью Azure Notification Hub и Firebase, установив там соединение, отправив тест pu sh, et c. и у меня все это работает, когда я могу получать уведомления, отправленные из концентратора в мое приложение (на моем телефоне). Я также смог успешно создать консольное приложение, которое отправляет уведомление (я предполагаю) в концентратор, который затем отправляет уведомление в мое приложение.

То, что я пытаюсь сделать, и причина этого вопроса - взять тот же код из консольного приложения и внедрить его в метод нажатия кнопки для Xamarin.Forms, чтобы я мог проверить отправку пу sh уведомление от нажатия кнопки, а также получение указанного уведомления.

Вот мой xaml (довольно базовый c)

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:d="http://xamarin.com/schemas/2014/forms/design"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         mc:Ignorable="d"
         x:Class="NotificationExample.MainPage">

<StackLayout>
    <!-- Place new controls here -->
    <Label x:Name="Received"
        Text="Welcome to Xamarin.Forms!" 
       HorizontalOptions="Center"
       VerticalOptions="CenterAndExpand" />

    <Button Text="Send Notification"
            Clicked="Button_Clicked"/>
</StackLayout>
</ContentPage>

Вот мой код позади для MainPage

[DesignTimeVisible(false)]
public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

        MessagingCenter.Subscribe<string>(this, "Update", (sender) =>
        {
            Device.BeginInvokeOnMainThread(() =>
            {
                Received.Text = sender;
            });
        });
    }

    private void Button_Clicked(object sender, EventArgs e)
    {
        SendTemplateNotificationsAsync().GetAwaiter().GetResult();
    }

    private static async Task SendTemplateNotificationsAsync()
    {
        NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString(DispatcherConstants.FullAccessConnectionString, DispatcherConstants.NotificationHubName);
        Dictionary<string, string> templateParameters = new Dictionary<string, string>();

        // Send a template notification to each tag. This will go to any devices that
        // have subscribed to this tag with a template that includes "messageParam"
        // as a parameter
        foreach (var tag in DispatcherConstants.SubscriptionTags)
        {
            templateParameters["messageParam"] = $"Test notification {Guid.NewGuid()}";
            try
            {
                await hub.SendTemplateNotificationAsync(templateParameters, tag);
            }
            catch (Exception ex)
            {
            }
        }
    }
}

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

Есть ли что-то отличное в том, что оно включено в проект Xamarin.Forms по сравнению с консольным приложением?

1 Ответ

0 голосов
/ 22 января 2020

Единственное заметное отличие состоит в том, что вы сейчас работаете в потоке пользовательского интерфейса. А выполнение длинных операций в потоке пользовательского интерфейса может привести к зависанию и в конце концов создать sh приложение, которое похоже на то, что происходит с вами. Если это так, запустите код внутри Task.Run.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...