Xamarin.iOS での通知管理
iOS 12 では、オペレーティング システムは通知センターと設定アプリから、アプリの通知管理スクリーンにディープ リンクできます。 このスクリーンでは、アプリが送信するさまざまな種類の通知を、ユーザーがオプトインやアウトできるようにする必要があります。
通知管理スクリーン
サンプル アプリ内では ManageNotificationsViewController
によって、ユーザーが赤の通知と緑の通知を個別に有効および無効にすることができるユーザー インターフェイスが定義されます。 これは標準の UIViewController
で、通知の種類ごとに UISwitch
が含まれています。 いずれかの種類の通知のスイッチを切り替えると、その種類の通知に対するユーザーの設定が (ユーザーの既定値の中に) 保存されます。
partial void HandleRedNotificationsSwitchValueChange(UISwitch sender)
{
NSUserDefaults.StandardUserDefaults.SetBool(sender.On, RedNotificationsEnabledKey);
}
Note
通知管理スクリーンでは、ユーザーがアプリの通知を完全に無効にしたかどうかもチェックします。 その場合、個別の通知の種類のトグルが非表示になります。 これを行うには、通知管理スクリーンで次を実行します。
UNUserNotificationCenter.Current.GetNotificationSettingsAsync
を呼び出してAuthorizationStatus
プロパティを調べます。- アプリの通知が完全に無効になっている場合は、個別の通知の種類のトグルを非表示にします。
- ユーザーはいつでも iOS 設定内で通知を有効または無効にできるため、そのアプリケーションがフォアグラウンドに移動するたびに通知が無効かどうかを再度チェックします。
通知を送信するサンプル アプリの ViewController
クラスは、ローカル通知を送信する前にユーザーの設定をチェックし、その通知がユーザーが実際に受信したい種類であることを確認します。
partial void HandleTapRedNotificationButton(UIButton sender)
{
bool redEnabled = NSUserDefaults.StandardUserDefaults.BoolForKey(ManageNotificationsViewController.RedNotificationsEnabledKey);
if (redEnabled)
{
// ...
ディープ リンク
iOS では、通知センターおよび設定アプリ内のアプリの通知設定から、アプリの通知管理スクリーンにディープ リンクします。 これを容易にするには、アプリで次を実行する必要があります。
- アプリの通知認可要求に
UNAuthorizationOptions.ProvidesAppNotificationSettings
を渡して、通知管理スクリーンが使用可能であることを示します。 IUNUserNotificationCenterDelegate
のOpenSettings
メソッドを実装します。
承認要求
通知管理スクリーンが使用可能であることをオペレーティング システムに示すには、アプリは UNAuthorizationOptions.ProvidesAppNotificationSettings
オプションを (必要なその他の通知配信オプションと共に) UNUserNotificationCenter
上の RequestAuthorization
メソッドに渡す必要があります。
たとえば、サンプル アプリの AppDelegate
内では次のようになります。
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
// Request authorization to send notifications
UNUserNotificationCenter center = UNUserNotificationCenter.Current;
var options = UNAuthorizationOptions.ProvidesAppNotificationSettings | UNAuthorizationOptions.Alert | UNAuthorizationOptions.Sound | UNAuthorizationOptions.Provisional;
center.RequestAuthorization(options, (bool success, NSError error) =>
{
// ...
OpenSettings メソッド
アプリの通知管理スクリーンにディープ リンクするシステムによって呼び出される OpenSettings
メソッドは、ユーザーをそのスクリーンに直接移動させる必要があります。
サンプル アプリ内では、このメソッドは必要に応じて ManageNotificationsViewController
にセグエを実行します。
[Export("userNotificationCenter:openSettingsForNotification:")]
public void OpenSettings(UNUserNotificationCenter center, UNNotification notification)
{
var navigationController = Window.RootViewController as UINavigationController;
if (navigationController != null)
{
var currentViewController = navigationController.VisibleViewController;
if (currentViewController is ViewController)
{
currentViewController.PerformSegue(ManageNotificationsViewController.ShowManageNotificationsSegue, this);
}
}
}