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);
}
}
}