如何让我的应用程序在加载但不在前台运行时发送通知? [英] How can I make my app send out notifications when it's loaded but not running in the foreground?
问题描述
我有一个有时会使用的应用程序.我一定是睡前把它留在了后台.当我醒来时,我在屏幕上看到了这个通知.
有人对如何在 XF 应用程序中显示这样的通知有任何建议吗?
此外,这些通知是否也会出现在 Android 上?我从未在我的 Android 手机上见过它们,但这可能是因为我很少使用它.
我们可以使用
https://github.com/brminnick/LocalNotificationsSample
I have an app that I use sometimes. I must have left it there in the background before I slept. When I woke up I saw this notification on my screen.
Does anyone have any suggestions on how I can make a notification like this appear with my XF application?
Also, do these notifications appear on Android also? I've never seen them on my Android phone but that could be because I use it much less.
We can use Shiny.Notifications NuGet Package to create cross-platform Local Notifications in Xamarin.Forms
Sample App
A completed sample app created using the code below can be found here: https://github.com/brminnick/LocalNotificationsSample
Walkthrough
1. Install Shiny.Notifications
Add the Shiny.Notifications NuGet Package v1.2.0.1755 to your Xamarin.Forms project, your Xamarin.iOS project and Xamarin.Android project.
2. Initialize Shiny.Notifications
Android
In the [Application]
class, in OnCreate
, initialize Shiny by calling Shiny.AndroidShinyHost.Init
and setting its icon by calling Shiny.Notifications.AndroidOptions.DefaultSmallIconResourceName
:
using System;
using Android.App;
using Android.Runtime;
using Shiny;
namespace LocalNotificationsSample.Droid
{
[Application]
public class YourApplication : Application
{
public YourApplication(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer)
{
}
public override void OnCreate()
{
base.OnCreate();
AndroidShinyHost.Init(this, platformBuild: services => services.UseNotifications());
Notifications.AndroidOptions.DefaultSmallIconResourceName = "icon.png";
}
}
}
In MainActivity.cs
, in OnRequestPermission
, allow Shiny to present request notifications permissions from the user by adding Shiny.AndroidShinyHost.OnRequestPermissionsResult(requestCode, permissions, grantResults);
using Android.App;
using Android.Content.PM;
using Android.OS;
using Android.Runtime;
namespace LocalNotificationsSample.Droid
{
[Activity(Label = "LocalNotificationsSample", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
Shiny.AndroidShinyHost.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
}
}
iOS
In AppDelegate.cs
, in FinishedLaunching
, initialize Shiny by calling Shiny.iOSShinyHost.Init
:
using Foundation;
using UIKit;
using Shiny;
namespace LocalNotificationsSample.iOS
{
[Register(nameof(AppDelegate))]
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
iOSShinyHost.Init(platformBuild: services => services.UseNotifications());
global::Xamarin.Forms.Forms.Init();
LoadApplication(new App());
return base.FinishedLaunching(app, options);
}
}
}
3. Schedule a Local Notification
In this example, we will send a Local Notification immediately and schedule one to be sent one minute after the app launches
using System;
using System.Threading.Tasks;
using Shiny;
using Shiny.Notifications;
using Xamarin.Forms;
namespace LocalNotificationsSample
{
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
protected override async void OnStart()
{
await SendNotificationNow();
await ScheduleLocalNotification(DateTimeOffset.UtcNow.AddMinutes(1));
}
Task SendNotificationNow()
{
var notification = new Notification
{
Title = "Testing Local Notifications",
Message = "It's working",
};
return ShinyHost.Resolve<INotificationManager>().RequestAccessAndSend(notification);
}
Task ScheduleLocalNotification(DateTimeOffset scheduledTime)
{
var notification = new Notification
{
Title = "Testing Local Notifications",
Message = "It's working",
ScheduleDate = scheduledTime
};
return ShinyHost.Resolve<INotificationManager>().Send(notification);
}
}
}
https://github.com/brminnick/LocalNotificationsSample
这篇关于如何让我的应用程序在加载但不在前台运行时发送通知?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!