iOS自定义按钮不显示交互通知

iOS自定义按钮不显示交互通知,ios,ios8,uilocalnotification,Ios,Ios8,Uilocalnotification,我目前正在制作交互式iOS通知​​到了8岁,老实说,我真的很难看到我的按钮。 使用下面的代码,我看不到我的按钮: //相互作用的 UIMutableUserNotificationAction *acceptAction = [[UIMutableUserNotificationAction alloc] init]; acceptAction.identifier = @"ACCEPT_IDENTIFIER"; acceptAction.title = @"Accept"; acceptAc

我目前正在制作交互式iOS通知​​到了8岁,老实说,我真的很难看到我的按钮。 使用下面的代码,我看不到我的按钮:

//相互作用的

UIMutableUserNotificationAction *acceptAction =
[[UIMutableUserNotificationAction alloc] init];

acceptAction.identifier = @"ACCEPT_IDENTIFIER";
acceptAction.title = @"Accept";
acceptAction.activationMode = UIUserNotificationActivationModeBackground;
acceptAction.destructive = NO;
acceptAction.authenticationRequired = NO;

UIMutableUserNotificationAction *maybeAction =
[[UIMutableUserNotificationAction alloc] init];

maybeAction.identifier = @"MAYBE_IDENTIFIER";
maybeAction.title = @"Maybe";
maybeAction.activationMode = UIUserNotificationActivationModeBackground;
maybeAction.destructive = NO;
maybeAction.authenticationRequired = YES;


UIMutableUserNotificationAction *declineAction =
[[UIMutableUserNotificationAction alloc] init];

declineAction.identifier = @"DECLINE_IDENTIFIER";
declineAction.title = @"Decline";
declineAction.activationMode = UIUserNotificationActivationModeBackground;
declineAction.destructive = YES;
declineAction.authenticationRequired = NO;


UIMutableUserNotificationCategory *inviteCategory =
[[UIMutableUserNotificationCategory alloc] init];

inviteCategory.identifier = @"INVITE_CATEGORY";

[inviteCategory setActions:@[acceptAction, maybeAction, declineAction]
                forContext:UIUserNotificationActionContextDefault];

[inviteCategory setActions:@[acceptAction, declineAction]
                forContext:UIUserNotificationActionContextMinimal];


NSSet *categories = [NSSet setWithObjects:inviteCategory, nil];
UIUserNotificationType types = UIUserNotificationTypeBadge |
UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:categories];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
[[UIApplication sharedApplication] registerForRemoteNotifications];

UILocalNotification* localNotification = [[UILocalNotification alloc] init];
localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:10];
localNotification.alertBody = @"Testing";
localNotification.category = @"INVITE_CATEGORY"; //  Same as category identifier
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
对我的问题有什么想法吗?
尽管互联网上有这么多例子,但我显然是唯一有这个问题的人。

这里有一个非常棒的教程:

代码中的所有内容看起来都很好。我要问的是,确保你没有忽略实际发生的事情——如果你看到主屏幕上的通知,你是否在通知上向左滑动以显示按钮

这是我正在使用的(对swift表示抱歉)

通知初始提示

    var openAction = UIMutableUserNotificationAction()
    openAction.identifier = "OPEN_IDENTIFIER"
    openAction.title = "Open"
    openAction.destructive = false
    openAction.authenticationRequired = false
    openAction.activationMode = .Foreground

    var snoozeAction = UIMutableUserNotificationAction()
    snoozeAction.identifier = "SNOOZE_IDENTIFIER"
    snoozeAction.title = "Snooze"
    snoozeAction.destructive = true
    snoozeAction.authenticationRequired = false
    snoozeAction.activationMode = .Background

    var snoozeable = UIMutableUserNotificationCategory()
    snoozeable.identifier = NOTE_SNOOZE_CAT
    snoozeable.setActions([openAction, snoozeAction], forContext: .Default)
    snoozeable.setActions([openAction, snoozeAction], forContext: .Default)

    var notSnoozable = UIMutableUserNotificationCategory()
    notSnoozable.identifier = NOTE_NO_SNOOZE_CAT
    notSnoozable.setActions([openAction], forContext: .Default)
    notSnoozable.setActions([openAction], forContext: .Default)

    UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Sound | .Alert |
        .Badge, categories: NSSet(array:[snoozeable, notSnoozable])
        ))
本地通知

    var notification             = UILocalNotification()
    notification.fireDate        = fireDate
    notification.timeZone        = NSTimeZone.defaultTimeZone()
    notification.alertBody       = "Alert Body"
    notification.userInfo        = userInfo
    notification.category        = blnCanSnooze ? NOTE_SNOOZE_CAT : NOTE_NO_SNOOZE_CAT
    UIApplication.sharedApplication().scheduleLocalNotification(notification)

我有一个不同的问题。我正在处理多种类型的通知我的通知中很少有不显示操作按钮的,而很少有。发现只有最后设置的通知显示操作按钮。我很愚蠢,没有想到在共享设置时,类别的标识符会被最后一次设置通知覆盖。 为了处理此问题,我们需要提取当前的通知设置,将我们的设置添加到其中,然后重新设置:

    NSMutableArray *arrNewCategories = [NSMutableArray new];
    UIUserNotificationSettings *oldSettings = [[UIApplication sharedApplication]currentUserNotificationSettings];
    for (UIMutableUserNotificationCategory *oldCategory in oldSettings.categories)
    {
      if (![oldCategory.identifier isEqualToString:newNotificationCategory.identifier])
           [arrNewCategories addObject:oldCategory];
    }
    [arrNewCategories addObject:newNotificationCategory];

    UIUserNotificationType notificationType = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
    UIUserNotificationSettings *newSettings = [UIUserNotificationSettings settingsForTypes:notificationType categories:[NSSet setWithArray:arrNewCategories]];

    [[UIApplication sharedApplication] registerUserNotificationSettings:newSettings];

只需确保newNotificationCategory的标识符与您的UILocalNotification的类别匹配。

我认为在第二个
Snoozable.setActions([openAction,Snoozaction],forContext:.Default)
,您的意思是用
.Minimal
替换
notSnoozable
@Stephen:你知道提醒应用程序是如何决定使用“最小”上下文还是“默认”上下文的操作类别的吗?@Chanchal-通知类型取决于显示的通知。默认提醒显示在主屏幕上(我认为它支持4个操作)。当通知来自仅支持两个操作的通知横幅(顶部/模式弹出通知的下拉列表)时,使用最小上下文。@Stephendnell,这两个操作都是正确的。我想知道提醒应用程序是如何在默认情况下使用“默认”上下文的(当你安装iOS时),但是我们无法在默认情况下为我们的应用程序设置“默认”选项。用户将选择应用程序的通知应显示为警报还是横幅。我们不能强迫它。横幅是苹果为我们的应用程序选择的默认方式。我的本地通知也遇到了同样的问题,我应该把代码放在哪里,什么是oldCategory,newNotificationCategory?无论你在哪里创建通知,你都应该遵循这一点。要添加每个通知,您还需要添加一个UIMutableUserNotificationCategory,在这里,对于我的新通知,它是带有新设置的newNotificationCategory,循环中的oldCategory对象将包含您已添加的所有先前通知的类别。