Xamarin Forms - Как открыть определенную страницу после нажатия на уведомление, когда приложение закрыто? - PullRequest
0 голосов
/ 17 мая 2018

На самом деле я работаю над приложением Xamarin Forms, которому нужны push-уведомления. Я использую плагин Plugin.PushNotification.

Когда приложение работает на переднем плане или спит (OnSleep), у меня нет проблем, чтобы открыть определенную страницу, когда я нажимаю на уведомление, которое я получаю. Но мне было интересно, как я могу это сделать, когда приложение закрыто. Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Я наконец-то нашел ответ сам и хочу поделиться им, если кому-то это понадобится.

Nota bene : согласно официальной документации плагина, Xam.Plugin.PushNotification устарело. Я использую новую версию этого плагина, Plugin.PushNotification , который использует FCM для Android и APS для iOS.

Нет существенных различий, чтобы открыть уведомление, когда приложение работает, спит или закрыто. Просто добавьте следующий метод обратного вызова в метод OnCreate (MyProject.Droid> MainApplication> OnCreate) и метод FinishedLaunching (MyProject.iOS> AppDelegate> FinishedLaunching):

CrossPushNotification.Current.OnNotificationOpened += (s, p) =>
{
    // manage your notification here with p.Data
    App.NotifManager.ManageNotif(p.Data);
};

Общая часть

App.xaml.cs

// Static fields
// *************************************

public static NotifManager NotifManager;

// Constructor
// *************************************

public App()
{
    ...
    NotifManager = new NotifManager();
    ...
}

NotifManager.cs

public class NotifManager
{
    // Methods
    // *************************************

    public void ManageNotif(IDictionary<string, object> data)
    {
        // 1) switch between the different data[key] you have in your project and parse the data you need
        // 2) pass data to the view with a MessagingCenter or an event
    }
}
0 голосов
/ 18 мая 2018

К сожалению, нет краткого ответа ни для одной из платформ. Вообще говоря, вы должны указать ОС, что делать при запуске приложения в результате push-уведомления. На обеих платформах также следует учитывать уровень API, на который вы нацелены, иначе он не будет работать или даже приведет к сбою приложения.

В iOS вам необходимо соответствующим образом реализовать этот метод в AppDelegate: FinishedLaunching(UIApplication application, NSDictionary launchOptions). launchOptions будет иметь полезную нагрузку из push-уведомления, чтобы вы могли определить, что с ним делать (например, какую страницу открыть). Для получения дополнительной информации о iOS, документация Xamarin - хорошее место для начала.

Android имеет более сложную топологию с точки зрения более существенных различий между уровнями API, независимо от того, используете ли вы GCM / FCM, а также требует большего количества компонентов кода. Однако, чтобы ответить на вопрос напрямую, вам нужно будет обработать это в OnCreate(Bundle savedInstanceState) вашей основной деятельности. Если вы используете Firebase, полезные данные push-уведомлений доступны в Intent.Extras. Снова, документация Xamarin имеет хорошее прохождение.

Наконец, обратите внимание, что используемая вами библиотека Plugin.PushNotification устарела. Я предлагаю вам либо изменить свою библиотеку и / или вашу реализацию в ближайшее время. Одной из причин того, что библиотека устарела, является то, что Google устарел основной службой Google Cloud Messaging (GCM), которая будет выведена из эксплуатации 11 апреля 2019 года.

...