1

我有一个包含用户“警报”的 iOS 应用程序 - 当应用程序不在前台时发送给用户。我正在使用 UNUserNotifications,并且在 iOS 10 和 iOS 11 测试中一切正常。

我还想覆盖仍在使用 iOS 8 和 iOS 9 的用户。

为了向 iOS 8 用户发送通知,我是否需要包含使用 UILocalNotifications 的替代方法?还是 iOS 8 会正确响应 UNUserNotificatons?

如果我需要同时包含两者,我可以使用一些 if 来使用基于操作系统的正确的。我必须包含一个已弃用的技术似乎很奇怪。

4

2 回答 2

1

UNUserNotifications是 iOS 10 及更高版本,因此不适用于 iOS 8 和 iOS 9。在这种情况下,您应该检查是否UNUserNotifications存在,或者退回到旧方法,例如:

if (NSClassFromString(@"UNUserNotificationCenter")) {
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    UNAuthorizationOptions options = (UNAuthorizationOptionBadge | UNAuthorizationOptionAlert | UNAuthorizationOptionSound);

    [center requestAuthorizationWithOptions: options
                          completionHandler: ^(BOOL granted, NSError * _Nullable error) {
                              if (granted) {
                                  NSLog(@"Granted notifications!");
                              }
                          }];
}
else {
    UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound);
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes: userNotificationTypes categories: nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings: settings];
}
于 2018-03-25T20:30:45.937 回答
0

UserNotifications 框架是随 iOS 10 添加到 iOS 中的,因此对于之前的任何版本,您都需要使用较旧的UILocalNotification. 您是正确的,UILocalNotification在 iOS 10 中已弃用UserNotifications.framework,但在 iOS 10 之前,来自 UserNotifications 框架的符号不可用,因此没有其他方法。您可以使用简单的 iOS 版本检查来确定何时使用任一方法:

if(@available(iOS 10, *)){
    //UserNotifications method
}
else{
    //UILocalNotification method
}
于 2018-03-25T20:32:36.430 回答