Xamarin.Forms AppCenter Push-уведомление - PullRequest
0 голосов
/ 27 ноября 2018

В настоящее время я использую Xamarin.Forms с AppCenter Push, чтобы получать уведомления.Моя конечная цель - иметь эту функциональность:

Если приложение закрыто ИЛИ открыто, я могу получить уведомление (указано в списке уведомлений) и по щелчку перенаправить пользователя на определенную страницу.На основании предоставленных пользовательских данных я собираюсь перенаправить его на другую страницу.В документах AppCenter Push для Xamarin.Forms я обнаружил, что если приложение открыто, мой метод должен иметь новое событие уведомления, но не будет - отображать уведомление.

Вот мой очень простойкод: App.xaml.cs

protected override async void OnStart()
{
    await Push.SetEnabledAsync(true);
    if (!AppCenter.Configured)
    {
        Push.PushNotificationReceived += (sender, e) =>
        {
            DependencyService.Resolve<IMessageService>().LongAlert("TESTT");
            // Add the notification message and title to the message
            string 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 (string key in e.CustomData.Keys)
                {
                    summary += $"\t\t{key} : {e.CustomData[key]}\n";
                }
            }

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

    AppCenter.Start("", typeof(Push));
}

Тогда у меня есть: MainActivity.cs

protected override void OnNewIntent(Intent intent)
{
    base.OnNewIntent(intent);
    Push.CheckLaunchedFromNotification(this, intent);
}

Изо всех сил пытается реализовать этот простой сценарийЯ столкнулся с разными проблемами:

  1. Когда я впервые запускаю приложение и отправляю уведомление (пока приложение открыто), обработчик «PushNotificationReceived» не срабатывает.Затем я оставляю приложение в фоновом режиме и снова отправляю уведомление.Теперь на этот раз я получаю уведомление внутри своего «Списка уведомлений» на Android, и когда я нажимаю на него, приложение открывается, затем проходит через «OnNewIntent» и затем нажимает «PushNotificationReceived».Каждое уведомление после этого делает одно и то же (поэтому оно работает правильно), независимо от того, запущено ли приложение на переднем или заднем плане.Подводя итог, проблема в том, что в первый раз, когда я запускаю приложение, я не получаю уведомления и получаю их только в том случае, если я минимизирую их и открываю новое уведомление, поэтому я использую метод "OnNewIntent".
  2. Второй сценарий - как узнать, был ли запущен «PushNotificationReceived», когда приложение работает в фоновом или переднем плане, исходя из того, что я хочу запустить другую логику.Поскольку очевидно, что AppCenter не будет отображать уведомление, если приложение открыто, я хочу создать свое собственное, но в этом случае я не знаю, было ли приложение открыто, когда пришло уведомление или нет.

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать!Заранее спасибо!

1 Ответ

0 голосов
/ 28 ноября 2018

Попробуйте делать уведомления о событиях в андроиде.Для передачи параметров из Android в приложение Forms вы можете использовать MessagingCenter.В приведенном ниже событии о получении уведомления вы можете извлечь данные из полезных данных уведомлений и передать их в приложение форм с помощью MessagingCenter.Убедитесь, что вы выполнили следующие шаги.

В методе OnCreate вашей функции MainActivity зарегистрируйтесь и подпишитесь на PushNotification.

 if (!AppCenter.Configured)
 {
    Push.PushNotificationReceived += (sender, e) =>
    {

    };
  }

В методе NewIntent

protected override void OnNewIntent(Intent intent)
    {
        base.OnNewIntent(intent);

        Push.CheckLaunchedFromNotification(this, intent);

        var type = intent.GetStringExtra("type");
        if ((!string.IsNullOrEmpty(type) && object.Equals(type, "notification")))
        {

        }
    }
...