2014-09-30 56 views
3

我目前正在开发由8制作的交互式iOS通知,说实话,我真的很难看到我的按钮。 用下面的代码,我看不到我的按钮:iOS自定义按钮不显示为交互式通知

// INTERACIVE

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]; 

我的问题任何想法? 尽管在互联网上的所有例子,我显然是唯一一个这个问题。

回答

8

有一个真正伟大的教程在这里:在你的代码The Code Ninja

一切都看起来不错。我必须要求确保您不只是忽略实际发生的事情 - 如果您在主屏幕上查看通知,您是否在通知上向左滑动以显示按钮?

这里是我使用(抱歉关于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) 
+1

您的教程有效!谢谢你,兄弟! – NiClou 2014-10-23 13:17:46

+0

我想在第二个'snoozeable.setActions([openAction,snoozeAction],forContext:.Default)',你打算用'.Minimal'替换'.Default'。 'notSnoozable'也一样。 – MichaelScaria 2015-06-05 18:21:04

+0

@Stephen:您是否知道提醒应用程序是如何决定是使用“最小”上下文还是使用“默认”上下文的操作类别? – 2015-10-11 04:12:50

3

我有一个不同的问题是什么。我正在处理多种类型的通知。 我的通知中几乎没有显示动作按钮,而很少有人是。发现只有最后设置的通知才显示动作按钮。我很愚蠢,因为设置是共享的,所以不要认为类别的标识符被上次设置的通知覆盖。 为了处理这个问题,我们需要提取当前的通知设置,我们添加到它,并重新设置回:

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的类别相匹配。

+0

我得到了与我的本地通知相同的问题,我应该把这个代码和什么是oldCategory,newNotificationCategory? – 2016-05-18 13:11:22

+0

无论你在哪里创建通知,你都应该遵循这一点。为了添加每个通知,您还需要添加一个UIMutableUserNotificationCategory,在这里为我的新通知它是newNotificationCategory与新的设置,循环中的oldCategory对象将包含所有您已经添加的通知的类别。 – Zaraki 2016-05-19 02:09:03

+0

看起来不错,谢谢! – 2016-05-19 05:24:28