iOS自定义按钮不显示为交互式通知
我目前正在开发由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];
我的问题任何想法? 尽管在互联网上的所有例子,我显然是唯一一个这个问题。
有一个真正伟大的教程在这里:在你的代码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)
我有一个不同的问题是什么。我正在处理多种类型的通知。 我的通知中几乎没有显示动作按钮,而很少有人是。发现只有最后设置的通知才显示动作按钮。我很愚蠢,因为设置是共享的,所以不要认为类别的标识符被上次设置的通知覆盖。 为了处理这个问题,我们需要提取当前的通知设置,我们添加到它,并重新设置回:
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的类别相匹配。
我得到了与我的本地通知相同的问题,我应该把这个代码和什么是oldCategory,newNotificationCategory? – 2016-05-18 13:11:22
无论你在哪里创建通知,你都应该遵循这一点。为了添加每个通知,您还需要添加一个UIMutableUserNotificationCategory,在这里为我的新通知它是newNotificationCategory与新的设置,循环中的oldCategory对象将包含所有您已经添加的通知的类别。 – Zaraki 2016-05-19 02:09:03
看起来不错,谢谢! – 2016-05-19 05:24:28
您的教程有效!谢谢你,兄弟! – NiClou 2014-10-23 13:17:46
我想在第二个'snoozeable.setActions([openAction,snoozeAction],forContext:.Default)',你打算用'.Minimal'替换'.Default'。 'notSnoozable'也一样。 – MichaelScaria 2015-06-05 18:21:04
@Stephen:您是否知道提醒应用程序是如何决定是使用“最小”上下文还是使用“默认”上下文的操作类别? – 2015-10-11 04:12:50