我实际上正在处理需要推送通知的Xamarin Forms应用程序。我使用Plugin.PushNotification插件。
当应用程序在前台运行或正在休眠(OnSleep)时,单击我收到的通知时打开特定页面没有问题。但我想知道在关闭应用程序时如何才能这样做。谢谢!
答案 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是一个很好的起点。
OnCreate(Bundle savedInstanceState)
中处理此问题。如果您使用的是Firebase,则Intent.Extras
中会提供推送通知有效内容。同样,Xamarin's documentation有一个很好的演练。
最后,请注意,您使用的Plugin.PushNotification
库已被弃用。我建议您尽快更改库和/或实施。库已被弃用的部分原因是Google已弃用基础Google云消息传递(GCM)服务,该服务将于2019年4月11日退役。