OneSignal Xamarin.Forms HandleNotificationOpened перенаправление на страницу уведомления

в моем проекте Xamarin.Forms я использую OneSignal для уведомлений. В iOS Xamarin.Forms.Application.Current.MainPage = новая страница навигации (новая страница уведомления ()); работал, но в Android не работает. Я попытался использовать центр обмена сообщениями для связи с проектом PCL. Он работал, когда приложение работает в фоновом режиме, но не работает, когда приложение закрыто. Как я могу перенаправить конкретную страницу уведомления при получении уведомления в Android? Спасибо

Примечание: код отредактирован и проблема решена, я использовал общие настройки, чтобы контролировать, запускается ли приложение из уведомления или нет. Затем загружаю приложение xamarin.Forms.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 216
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать метод ниже до вызова метода LoadApplication ().

if (Intent.Extras != null)
        {
            foreach (var key in Intent.Extras.KeySet())
            {
                if (key != null)
                {
                    var value = Intent.Extras.GetString(key);                        
                    Log.Debug(TAG, "Key: {0} Value: {1}", key, value);
                }
            }
        }

 LoadApplication(new App());

Вам необходимо установить метод intent.putExtra () в OnMessageReceivedMethod ().

intent.PutExtra("Key", "value");

Затем вы можете использовать перенаправление в файле App.xaml.cs на основе этого значения ключа. Потому что в Android, когда уведомление открыто, а приложение повторно инициализируется.

Я думаю, вам не нужно ставить условия ниже.

 if (extrasList[0] == "true")
    {
        LoadApplication(new App(true));

    }
    else
    {
        LoadApplication(new App(false));

    }

Сначала сохраните значение на глобальном уровне, чтобы его можно было использовать в файле App.cs. Просто используйте приведенный ниже код для обработки навигации по страницам в классе App (), например.

 if (Device.RuntimePlatform == Device.Android)
                {
                    if (YourKey == "true")
                    {
                       //handle that page navigation
                    }
                    else
                    {
                       //Default Page of App
                    }
                }

Вы пытаетесь перенаправить при инициализации приложения? Верно?

Srusti Thakkar 18.07.2018 14:32

Да, я передаю в качестве аргумента конструктору App ()

Oguzhan Orhan 18.07.2018 14:47

Поэтому, когда приложение закрыто и вы открываете приложение из уведомления, значение намерения не устанавливается. Верно?

Srusti Thakkar 18.07.2018 14:53

Не могли бы вы поделиться своим кодом MainActivity?

Srusti Thakkar 18.07.2018 15:50

Используя общие настройки в Android, я сохраняю значение при получении уведомления, а затем проверяю это значение при загрузке приложения. Это сработало для меня

Oguzhan Orhan 19.07.2018 11:09

@OguzhanOrhan Хорошо. Отлично.

Srusti Thakkar 19.07.2018 11:29
Ответ принят как подходящий

Примечание: код отредактирован и проблема решена, я использовал общие настройки, чтобы контролировать, запускается ли приложение из уведомления или нет. Затем я загружаю приложение xamarin.Forms

public class MainActivity : 
global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{



 protected override void OnCreate(Bundle bundle)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(bundle);
        InitializeUI();

        global::Xamarin.Forms.Forms.Init(this, bundle);
        global::Xamarin.FormsMaps.Init(this, bundle);

        ImageCircleRenderer.Init();
        tV = new TextView(this);
        resources = this.Resources;


        OneSignal.Current.StartInit("***APP ID***")
           .InFocusDisplaying(OSInFocusDisplayOption.Notification)
           .HandleNotificationReceived(HandleNotificationReceived)
            .HandleNotificationOpened(HandleNotificationOpened)
             .EndInit();


        ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this);
        var LaunchFromNotification = prefs.GetString("is_notification_received", "false");
        if (LaunchFromNotification == "true")
        {
            LoadApplication(new App(true));

        }
        else
        {
            LoadApplication(new App(false));

        }

        OneSignal.Current.IdsAvailable(IdsAvailable); //Lets you retrieve the OneSignal player id and push token.
    }

}
        private static void HandleNotificationOpened(OSNotificationOpenedResult result)
    {
        ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(Android.App.Application.Context);
        ISharedPreferencesEditor editor = prefs.Edit();
        editor.PutString("is_notification_received", "true");
        editor.Apply();

    }
protected override void OnResume()
       {
            base.OnResume();
            ISharedPreferences prefs = 
     PreferenceManager.GetDefaultSharedPreferences(this);

        ISharedPreferencesEditor editor = prefs.Edit();
        editor.Remove("is_notification_received");
        editor.PutString("is_notification_received", "false");
        editor.Apply();
    }

Другие вопросы по теме