交互式通知 UIMutableUserNotificationAction authenticationRequired 不适用于一个 iphone ios 8.4

interactive notification UIMutableUserNotificationAction authenticationRequired is not working on one iphone ios 8.4

我们在 iOS 8 上使用交互式通知,我将交互式通知操作的 authenticationRequired 设置为 Yes,因此用户应首先解锁他的 phone 以选择操作。

我们将我们的应用程序发布到 HockeyApp 进行测试。它安装在三个不同的 iPhone 6 上,所有 iOS 8.4 所有 iphone 都启用了密码和 TouchID 以解锁 phone。在两个 iphone 上,当推送伴随屏幕锁定以选择接受操作时,它按预期工作,例如用户应该首先解锁他的 phone(通过密码或 TouchID)

但其中一个 iphone 不需要解锁!在用户可以执行操作。奇怪的是用户需要 touchID 或密码来解锁他的 phone 但对于通知操作它不需要。这是我们的代码,但我猜我们的代码很好,因为它在两个 phone 上按预期工作,但这里是代码以防我们遗漏某些东西:(我们正在使用 UrbanAirship 进行推送)

UAConfig *config = [UAConfig defaultConfig];
[UAirship push].userNotificationTypes = (UIUserNotificationTypeAlert |
                                         UIUserNotificationTypeBadge |
                                         UIUserNotificationTypeSound);
[UAirship takeOff:config];
[UAirship push].userPushNotificationsEnabled = YES;
[UAirship push].backgroundPushNotificationsEnabled = YES;


UIMutableUserNotificationAction *acceptAction = [[UIMutableUserNotificationAction alloc] init];
acceptAction.destructive = NO;
acceptAction.activationMode = UIUserNotificationActivationModeBackground;
acceptAction.authenticationRequired = YES;
acceptAction.title = @"Accept";
acceptAction.identifier = NotificationAuthAcceptAction;

UIMutableUserNotificationAction *declineAction = [[UIMutableUserNotificationAction alloc] init];
declineAction.destructive = NO;
declineAction.activationMode = UIUserNotificationActivationModeBackground;
declineAction.authenticationRequired = YES;
declineAction.destructive = YES;
declineAction.title = @"Decline";
declineAction.identifier = NotificationAuthDeclineAction;

UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc] init];
[category setActions:@[acceptAction, declineAction] forContext:UIUserNotificationActionContextMinimal];
[category setActions:@[acceptAction, declineAction] forContext:UIUserNotificationActionContextDefault];
category.identifier = NotificationAuthCategory;

[UAirship push].userNotificationCategories = [NSSet setWithArray:@[category]];
[[UAirship push] updateRegistration];

这是一个 iOS 8 错误(雷达 #18385104)。当您使用 isEqual 方法比较两个 UIUserNotificationActions 时,一些属性会设置为您正在比较的对象。由于必须将所有类别放入一个集合中,isEqual 方法针对每个对象,因此可以为任何操作修改 authorizationRequired 和 destructive 属性。

好消息是这个问题似乎已在 iOS 9.

中得到修复

这是一个显示行为的单元测试 - https://github.com/urbanairship/ios-library-dev/blob/6.1.0/AirshipLib/AirshipLogicTests/IOS8BugsTests.m