在后台时不调用UILocalNotification

时间:2017-04-27 07:54:26

标签: ios objective-c uilocalnotification

当应用处于后台且处于活动状态时,我尝试触发UILocalNotification。我使用以下内容:

在App Delegate中我想"赶上"通知回调(未被调用):

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo{

    NSLog(@"recieve-old-notif-here");

}

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{


    NSLog(@"recieve-old-notif");
}

以下是我如何宣布本地通知:

NSString *strToShow = [NSString stringWithFormat:@"Время вставать"];


UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:15];

notification.alertBody = strToShow;
notification.timeZone = [NSTimeZone defaultTimeZone];
notification.soundName = UILocalNotificationDefaultSoundName;
[[UIApplication sharedApplication] scheduleLocalNotification:notification];

请注意我已经通过iOS 10通知完成了该任务,但我想在旧版设备上支持此功能。

所以,我的委托方法假设要调用,但它们没有,为什么?

1 个答案:

答案 0 :(得分:1)

将以下代码添加到委托中的didFinishLaunchingWithOptions方法:

ifdef __IPHONE_8_0

//Right, that is the point
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound) categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];

否则

//register to receive notifications
UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];

ENDIF

以及委托方法;

#ifdef __IPHONE_8_0
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    //register to receive notifications
    [application registerForRemoteNotifications];
}

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
{
    //handle the actions
    if ([identifier isEqualToString:@"declineAction"]){
    }
    else if ([identifier isEqualToString:@"answerAction"]){
    }
}
#endif