Xamarin 表单通知
Xamarin Forms Notification
我尝试使用 Xamarin Forms 为 Android、ios 和 WinPhone 实现一个共享项目。我想使用通知,我遵循了这个示例 (https://github.com/edsnider/Xamarin.Plugins/tree/master/Notifier),并且能够在 Android 中创建本地通知。但我仍然不明白如何使用 Android 之类的应用程序。打开页面或检查页面是否已激活或中止所有平台的广播。
任何可以帮助我的链接?我是否正确,它只适用于我必须在每个平台上实现的接口,或者是否存在任何其他解决方案?
我的基本问题是我从 xmpp 协议获取消息并想向用户发送消息通知或更新 ui 如果打开...
感谢您的帮助...
您不必向平台项目添加任何接口,只需将 nuget 包安装到两个项目即可 Android/IOS。
在 IOS 你应该添加:
// Ask the user for permission to get notifications on iOS 8.0+
if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
var settings = UIUserNotificationSettings.GetSettingsForTypes (
UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
new NSSet ());
UIApplication.SharedApplication.RegisterUserNotificationSettings (settings);
}
你的方法:
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
在 AppDelegate 中:
然后在您的共享项目中调用:
using Plugin.LocalNotifications.Abstractions;
CrossLocalNotifications.Current.Show("You've got mail", "You have 793 unread messages!");
至于替换当前页面,您无需执行任何操作,Xamarin Forms 将为您处理。
同样在 android,您可以通过设置 MainActivity 的 LaunchMode 来控制应用程序重新启动行为:
示例:
LaunchMode = Android.Content.PM.LaunchMode.SingleInstance, AlwaysRetainTaskState = true
要在 Android 上阅读有关 LauchModes 的更多信息,请阅读:
https://developer.android.com/guide/components/tasks-and-back-stack.html
并检查另外 activity 标志:
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP
目前此插件不允许在应用内捕获任何通知。
但是您可以通过使用特定于平台的功能来做到这一点
public override void ReceivedLocalNotification(UIApplication application, UILocalNotification notification)
{
MessagingCenter.Send<MainPage> (this, "IOS notification received");
}
Android:
在阅读了这个插件的源代码之后,我发现,你可以在你的创建方法中检查 Bundle 的键 ScheduledAlarmHandler.LocalNotificationKey
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
if(bundle.ContainsKey(ScheduledAlarmHandler.LocalNotificationKey)){
//App launched form notification
MessagingCenter.Send<MainPage> (this, "Android notification received");
}
}
也可以尝试使用BroadcastReceiver class;
https://developer.xamarin.com/api/type/Android.Content.BroadcastReceiver/
我尝试使用 Xamarin Forms 为 Android、ios 和 WinPhone 实现一个共享项目。我想使用通知,我遵循了这个示例 (https://github.com/edsnider/Xamarin.Plugins/tree/master/Notifier),并且能够在 Android 中创建本地通知。但我仍然不明白如何使用 Android 之类的应用程序。打开页面或检查页面是否已激活或中止所有平台的广播。 任何可以帮助我的链接?我是否正确,它只适用于我必须在每个平台上实现的接口,或者是否存在任何其他解决方案?
我的基本问题是我从 xmpp 协议获取消息并想向用户发送消息通知或更新 ui 如果打开...
感谢您的帮助...
您不必向平台项目添加任何接口,只需将 nuget 包安装到两个项目即可 Android/IOS。
在 IOS 你应该添加:
// Ask the user for permission to get notifications on iOS 8.0+
if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
var settings = UIUserNotificationSettings.GetSettingsForTypes (
UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
new NSSet ());
UIApplication.SharedApplication.RegisterUserNotificationSettings (settings);
}
你的方法:
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
在 AppDelegate 中:
然后在您的共享项目中调用:
using Plugin.LocalNotifications.Abstractions;
CrossLocalNotifications.Current.Show("You've got mail", "You have 793 unread messages!");
至于替换当前页面,您无需执行任何操作,Xamarin Forms 将为您处理。
同样在 android,您可以通过设置 MainActivity 的 LaunchMode 来控制应用程序重新启动行为:
示例:
LaunchMode = Android.Content.PM.LaunchMode.SingleInstance, AlwaysRetainTaskState = true
要在 Android 上阅读有关 LauchModes 的更多信息,请阅读:
https://developer.android.com/guide/components/tasks-and-back-stack.html
并检查另外 activity 标志:
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP
目前此插件不允许在应用内捕获任何通知。 但是您可以通过使用特定于平台的功能来做到这一点
public override void ReceivedLocalNotification(UIApplication application, UILocalNotification notification)
{
MessagingCenter.Send<MainPage> (this, "IOS notification received");
}
Android: 在阅读了这个插件的源代码之后,我发现,你可以在你的创建方法中检查 Bundle 的键 ScheduledAlarmHandler.LocalNotificationKey
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
if(bundle.ContainsKey(ScheduledAlarmHandler.LocalNotificationKey)){
//App launched form notification
MessagingCenter.Send<MainPage> (this, "Android notification received");
}
}
也可以尝试使用BroadcastReceiver class; https://developer.xamarin.com/api/type/Android.Content.BroadcastReceiver/