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

时间:2018-05-17 09:46:30

标签: xamarin xamarin.forms push-notification lifecycle

我实际上正在处理需要推送通知的Xamarin Forms应用程序。我使用Plugin.PushNotification插件。

当应用程序在前台运行或正在休眠(OnSleep)时,单击我收到的通知时打开特定页面没有问题。但我想知道在关闭应用程序时如何才能这样做。谢谢!

2 个答案:

答案 0 :(得分:2)

我终于找到了自己的答案,我希望在有人需要的时候分享它。

Nota bene :根据该插件的官方文档,不推荐使用Xam.Plugin.PushNotification。我使用这个插件的新版本Plugin.PushNotification,它使用FCM for Android和APS for 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
    }
}

答案 1 :(得分:0)

不幸的是,这两个平台都没有简洁的答案。一般来说,您需要告诉操作系统在推送通知后启动应用程序时该怎么做。在这两个平台上,您还应该考虑要定位的API级别,否则它将无法工作甚至崩溃应用程序。

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

无论您使用的是GCM / FCM,还是需要更多的代码组件,Android的API级别之间的差异都会更加复杂。但是,要直接回答这个问题,您需要在主要活动的OnCreate(Bundle savedInstanceState)中处理此问题。如果您使用的是Firebase,则Intent.Extras中会提供推送通知有效内容。同样,Xamarin's documentation有一个很好的演练。

最后,请注意,您使用的Plugin.PushNotification库已被弃用。我建议您尽快更改库和/或实施。库已被弃用的部分原因是Google已弃用基础Google云消息传递(GCM)服务,该服务将于2019年4月11日退役。