時々使うアプリがあります。寝る前にバックグラウンドに置いたにちがいない。目が覚めると、画面にこの通知が表示されていました。
このような通知をXFアプリケーションで表示する方法について誰かが何か提案はありますか?
また、これらの通知はAndroidにも表示されますか?私はAndroidフォンでそれらを見たことがありませんが、それは私がそれをはるかに使用していないためです。
時々使うアプリがあります。寝る前にバックグラウンドに置いたにちがいない。目が覚めると、画面にこの通知が表示されていました。
このような通知をXFアプリケーションで表示する方法について誰かが何か提案はありますか?
また、これらの通知はAndroidにも表示されますか?私はAndroidフォンでそれらを見たことがありませんが、それは私がそれをはるかに使用していないためです。
回答:
我々は使用することができますShiny.Notifications NuGetパッケージを Xamarin.Formsにおけるクロスプラットフォームのローカル通知を作成します
以下のコードを使用して作成された完成したサンプルアプリは、https://github.com/brminnick/LocalNotificationsSampleにあります。
Xamarin.Formsプロジェクト、Xamarin.iOSプロジェクト、およびXamarin.AndroidプロジェクトにShiny.Notifications NuGetパッケージを追加します。
では[Application]
、クラス、中にOnCreate
呼び出すことにより、光沢を初期化し、Shiny.AndroidShinyHost.Init
呼び出すことによって、そのアイコンを設定します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";
}
}
}
でMainActivity.cs
、でOnRequestPermission
、次のように追加することにより、Shinyがユーザーからのリクエスト通知権限を提示できるようにします。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());
}
}
}
ではAppDelegate.cs
、をFinishedLaunching
呼び出してShinyを初期化します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);
}
}
}
この例では、ローカル通知をすぐに送信し、アプリが起動してから1分後に送信するようにスケジュールします
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);
}
}
}
Shiny.Notifications
フォアグラウンドサービスでの使用方法を知っていますか?StartForeground(int id, Android.App.Notification notification)
通知をとして提供する必要がある方法とはどういう意味Android.App.Notification
ですか?
を使用Notifications
して、この機能を実現できます。Xamarin.Formsのドキュメントローカル通知から 、次のことがわかります。
ローカル通知は、モバイルデバイスにインストールされているアプリケーションによって送信されるアラートです。ローカル通知は、次のような機能によく使用されます。
- リストアイテム
- カレンダーイベント
- リマインダー
ロケーションベースのトリガー各プラットフォームは、ローカル通知の作成、表示、消費を異なる方法で処理します。
アプリケーションが通知と対話するために使用できるクロスプラットフォームAPIを定義できます。
public interface INotificationManager
{
event EventHandler NotificationReceived;
void Initialize();
int ScheduleNotification(string title, string message);
void ReceiveNotification(string title, string message);
}
詳細については、上記のドキュメントを確認してください。このリンクには、通知に関するサンプルも含まれています。
もちろん、アプリがバックグラウンドにあるときにアプリに通知を送信させたい場合は、バックグラウンドタスクを使用できます。
詳細については、以下を確認できます。
https://xamarinhelp.com/xamarin-background-tasks/
https://docs.microsoft.com/zh-cn/xamarin/ios/app-fundamentals/backgrounding/
https://docs.microsoft.com/en-ie/xamarin/android/app-fundamentals/services/creating-a-service/