web-dev-qa-db-ja.com

ローカル通知を起動するときにアラートを表示する許可をユーザーに求める

ローカル通知が発生したときにアラートを表示したいのですが、iPhoneでアプリを実行すると表示されるように、許可を求める必要があります。

ローカル通知のスケジュールを試行しています{発火日= 2014年6月13日金曜日12時間10分27秒中央ヨーロッパ夏時間、タイムゾーン=(null)、繰り返し間隔= 0、繰り返し回数= UILocalNotificationInfiniteRepeatCount、次の発火日= 2014年6月13日金曜日12時間10分27秒中央ヨーロッパ夏時間、ユーザー情報=(null)}アラートありですが、アラートを表示する許可をユーザーから受け取っていません

どうやってやるの?現在のコードは次のとおりです。

    UILocalNotification *localNotif = [[UILocalNotification alloc] init];
    localNotif.fireDate = [[NSDate date] dateByAddingTimeInterval:timeUntilNotification];
    localNotif.soundName = UILocalNotificationDefaultSoundName;
    localNotif.alertBody = @"ZEIT!";
    localNotif.alertAction = @"Show me the Timer!";
    localNotif.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] +1;


    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
13
user3737316

このコードを追加すると、ユーザーに許可を求めるアラートビューが表示されます。

if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound|UIUserNotificationTypeBadge
                                                                                                          categories:nil]];
}

このコードはapplication:didFinishLaunchingWithOptionsに追加できます。メソッドを使用すると、ユーザーがアプリを起動したときにアプリがユーザーに確認するか、ローカル通知を設定するときにこのコードを追加できます。これはユーザー次第です。

40
蘇健豪

蘇健豪の答えはいいです。

Swiftでは次のようになります:

let registerUserNotificationSettings = UIApplication.instancesRespondToSelector("registerUserNotificationSettings:")

if registerUserNotificationSettings { 
    var types: UIUserNotificationType = UIUserNotificationType.Alert | UIUserNotificationType.Sound     
    UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotific‌​ationSettings(forTypes: types, categories: nil))
} 

こちらもご覧ください: iOS 8でUILocalNotificationsを受信するためのユーザー権限を要求する

4
Morkrom

Swift言語で...

var type = UIUserNotificationType.Badge | UIUserNotificationType.Alert | UIUserNotificationType.Sound;
var setting = UIUserNotificationSettings(forTypes: type, categories: nil);
UIApplication.sharedApplication().registerUserNotificationSettings(setting);
UIApplication.sharedApplication().registerForRemoteNotifications();
1
Krishnaveni
//register notifications
if([application respondsToSelector:@selector(registerUserNotificationSettings:)]) //ios 8+
{
    [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
    [application registerForRemoteNotifications];
}
else // ios 7 or less
{
    [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge];
}
1
Cayke Prudente

Objective-Cでこれを試してください

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        NSLog(@"didFinishLaunchingWithOptions");

        if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
            [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound categories:nil]];
        }

        return YES; 
    }
0
Jaime