1. ホーム
  2. ios

[解決済み] iOS 8でUILocalNotificationsを受け取るためにユーザーの許可を得ること

2022-05-18 10:43:29

質問

App Delegateでローカル通知を設定しています。

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UILocalNotification *notification = [[UILocalNotification alloc]init];
    [notification setAlertBody:@"Watch the Latest Episode of CCA-TV"];
    [notification setFireDate:[NSDate dateWithTimeIntervalSinceNow:5]];
    [notification setTimeZone:[NSTimeZone defaultTimeZone]];
    [application setScheduledLocalNotifications:[NSArray arrayWithObject:notification]];
}

アプリを実行してから終了すると、次のようなエラーが表示されます。

2014-06-07 11:14:16.663 cca-tv[735:149070] です。 ローカル通知のスケジュールを試行中 {fire date = 2014年6月7日土曜日 11:14:21 太平洋夏時間, time zone = America/Los_Angeles (PDT) offset -25200 (Daylight), repeat interval = 0, repeat count = UILocalNotificationInfiniteRepeatCount, 次の火災の日付 = 土曜日、6月7日、2014 11:14:21 太平洋夏時間で 時刻, ユーザー情報 = (null)}. アラートを表示する許可をユーザーから得ていない 警告を表示する許可をユーザから得ていない

アラートを表示するために必要な権限を取得するにはどうすればよいですか?

どのように解決するのですか?

iOS 8以降、アプリから通知を表示するにはユーザーの許可を得る必要があり、これはリモート/プッシュとローカル通知の両方に適用されます。Swift では、次のようにすることができます。

Swift 2.0へのアップデート

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    // Override point for customization after application launch.
    if(UIApplication.instancesRespondToSelector(Selector("registerUserNotificationSettings:")))
    {
        let notificationCategory:UIMutableUserNotificationCategory = UIMutableUserNotificationCategory()
        notificationCategory.identifier = "INVITE_CATEGORY"
        notificationCategory.setActions([replyAction], forContext: UIUserNotificationActionContext.Default)

        //registerting for the notification.
        application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes:[.Sound, .Alert, .Badge], categories: nil))
    }
    else
    {
       //do iOS 7 stuff, which is pretty much nothing for local notifications.
    }
    return true
}

Swift 3.2

if(UIApplication.instancesRespond(to: #selector(UIApplication.registerUserNotificationSettings(_:)))){
     let notificationCategory:UIMutableUserNotificationCategory = UIMutableUserNotificationCategory()
     notificationCategory.identifier = "INVITE_CATEGORY"
     notificationCategory.setActions([replyAction], forContext: UIUserNotificationActionContext.Default)

     //registerting for the notification.
        application.registerUserNotificationSettings(UIUserNotificationSettings(types:[.sound, .alert, .badge], categories: nil))
}
else{
        //do iOS 7 stuff, which is pretty much nothing for local notifications.
    }

Objective Cの文法も非常によく似ています。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
        [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
    }
    // Override point for customization after application launch.
    return YES;
}

現在登録されている通知の種類を確認するには、UIApplicationクラスのメソッドを使用します。

- (UIUserNotificationSettings *)currentUserNotificationSettings

もしユーザーがアプリに「No」と言ったのであれば、この関数は型がない設定を返すべきです。

私はこれについてのチュートリアルを書きました。 ここで .