Xamarin Forms - 如何在应用程序关闭时点击通知后打开特定页面?

5

我正在开发一款使用Xamarin Forms的应用程序,需要推送通知。我使用Plugin.PushNotification插件。

当应用程序在前台运行或处于睡眠状态(OnSleep)时,我在收到通知后单击通知可以打开特定页面,没有问题。但是当应用程序关闭时,我不知道如何实现这一点。谢谢!


iOS和Android? - TeamTam
是的,该应用程序(Xam Forms)针对iOS和Android。如果我需要在Android和iOS上编写特定的代码,这对我来说并不重要。 - Nicolas Bodin
@TeamTam 有什么想法吗? - Nicolas Bodin
2个回答

4

我最终自己找到了答案,现在想分享一下,以便有需要的人能够使用。

Nota bene: 根据插件的官方文档,Xam.Plugin.PushNotification已经被弃用。我使用了这个插件的新版本,Plugin.PushNotification,该插件在Android上使用FCM,在iOS上使用APS。

无论应用程序是运行、休眠还是关闭状态,打开通知没有显著的区别。只需在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
    }
}

1

很遗憾,对于任一平台都没有简洁的答案。一般来说,您需要告诉操作系统在启动应用程序时如何处理推送通知。在这两个平台上,您还应考虑您所针对的API级别,否则它将无法工作甚至会崩溃应用程序。

在iOS上,您需要适当地实现这个方法: FinishedLaunching(UIApplication application, NSDictionary launchOptions)launchOptions 将包含来自推送通知的有效负载,供您确定如何处理它(例如打开哪个页面)。有关更多iOS信息,Xamarin's documentation 是一个很好的起点。

Android在API级别之间的差异更加显著,使用GCM/FCM以及需要更多的代码组件,因此拓扑结构更为复杂。然而,直接回答问题,您需要在主Activity的OnCreate(Bundle savedInstanceState)中处理此问题。如果您正在使用Firebase,则推送通知有效负载可在Intent.Extras中使用。同样,Xamarin的文档提供了很好的步骤说明。
最后,请注意,您正在使用的Plugin.PushNotification库已被弃用。我建议您尽快更改您的库和/或实现方式。该库被弃用的部分原因是因为Google已经废弃了基础的Google Cloud Messaging(GCM)服务,该服务将于2019年4月11日停用。

根据插件的官方文档,被弃用的不是 Plugin.PushNotification,而是 Xam.Plugin.PushNotification:https://github.com/rdelrosario/xamarin-plugins/tree/master/PushNotification - Nicolas Bodin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接