Chúng tôi có thể sử dụng Gói Shiny.Notifying NuGet để tạo Thông báo cục bộ đa nền tảng trong Xamarin.Forms
Ứng dụng mẫu
Có thể tìm thấy một ứng dụng mẫu hoàn chỉnh được tạo bằng mã bên dưới tại đây: https://github.com/brminnick/LocalNotutionsSample
Hướng dẫn
1. Cài đặt Shiny. Thông báo
Thêm Gói NuGet Shiny.Notifying vào dự án Xamarin.Forms, dự án Xamarin.iOS của bạn và dự án Xamarin.Android.
2. Khởi tạo Shiny.
Android
Trong [Application]
lớp, in OnCreate
, khởi tạo Shiny bằng cách gọi Shiny.AndroidShinyHost.Init
và đặt biểu tượng của nó bằng cách gọi 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";
}
}
}
Trong MainActivity.cs
, trong OnRequestPermission
, cho phép Shiny trình bày các quyền thông báo yêu cầu từ người dùng bằng cách thêmShiny.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
Vào AppDelegate.cs
, trong FinishedLaunching
, khởi tạo Shiny bằng cách gọi 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. Lên lịch thông báo địa phương
Trong ví dụ này, chúng tôi sẽ gửi Thông báo cục bộ ngay lập tức và lên lịch gửi một phút sau khi ứng dụng khởi chạy
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/LocalNotutionsSample