プラットフォーム プロジェクトにインターフェイスを追加する必要はありません。両方のプロジェクト Android/IOS に nuget パッケージをインストールするだけです。
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
追加のアクティビティ フラグを確認します。
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP
現在、このプラグインはアプリ内の通知をキャッチできません。ただし、プラットフォーム固有の機能を使用してこれを行うことができます
IOS: https://developer.xamarin.com/guides/cross-platform/application_fundamentals/notifications/ios/remote_notifications_in_ios/を参照して
ください。
public override void ReceivedLocalNotification(UIApplication application, UILocalNotification notification)
{
MessagingCenter.Send<MainPage> (this, "IOS notification received");
}
Android: このプラグインのソースを読んだ後、ScheduledAlarmHandler.LocalNotificationKey キーの作成メソッドで Bundle を確認できることがわかりました。
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 クラスを使用することもできます。
https://developer.xamarin.com/api/type/Android.Content.BroadcastReceiver/