我正在开发一款使用Xamarin Forms的应用程序,需要推送通知。我使用Plugin.PushNotification插件。
当应用程序在前台运行或处于睡眠状态(OnSleep)时,我在收到通知后单击通知可以打开特定页面,没有问题。但是当应用程序关闭时,我不知道如何实现这一点。谢谢!
我正在开发一款使用Xamarin Forms的应用程序,需要推送通知。我使用Plugin.PushNotification插件。
当应用程序在前台运行或处于睡眠状态(OnSleep)时,我在收到通知后单击通知可以打开特定页面,没有问题。但是当应用程序关闭时,我不知道如何实现这一点。谢谢!
我最终自己找到了答案,现在想分享一下,以便有需要的人能够使用。
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
}
}
很遗憾,对于任一平台都没有简洁的答案。一般来说,您需要告诉操作系统在启动应用程序时如何处理推送通知。在这两个平台上,您还应考虑您所针对的API级别,否则它将无法工作甚至会崩溃应用程序。
在iOS上,您需要适当地实现这个方法: FinishedLaunching(UIApplication application, NSDictionary launchOptions)
。 launchOptions
将包含来自推送通知的有效负载,供您确定如何处理它(例如打开哪个页面)。有关更多iOS信息,Xamarin's documentation 是一个很好的起点。
OnCreate(Bundle savedInstanceState)
中处理此问题。如果您正在使用Firebase,则推送通知有效负载可在Intent.Extras
中使用。同样,Xamarin的文档提供了很好的步骤说明。Plugin.PushNotification
库已被弃用。我建议您尽快更改您的库和/或实现方式。该库被弃用的部分原因是因为Google已经废弃了基础的Google Cloud Messaging(GCM)服务,该服务将于2019年4月11日停用。