Мне нужно обновить приложение от нас для поддержки iOS 9 и iOS 10, поэтому моя проблема заключается в использовании UNUserNotificationCenter для PushNotifications.iOS 10/9 Push-уведомления
Так с прошивкой 9 у нас есть метод, который возвращает результат UIUserNotificationSettings как
- (BOOL)alertEnabled {
UIUserNotificationSettings *theSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];
return [theSettings types] & UIUserNotificationTypeAlert;
}
С прошивкой 10 я сделал что-то вроде
- (void)userNotificationsAuthorization :(void (^)(BOOL alertIsActive))completion {
[[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
completion(settings.alertSetting == UNNotificationSettingEnabled);
}];
}
вызова его и получить его с помощью обработчика завершения.
Моего вопроса: Есть ли какая-то возможность использовать getNotificationSettingsWithCompletionHandler и возвращения значению вместо обработчика завершения, что я могу использовать его в мою alertEnabled метода?
Большое спасибо.
Update:
При таком подходе он работает
- (BOOL)alertIsEnabled {
__block BOOL alertIsActive = NO;
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
[[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
alertIsActive = settings.alertSetting == UNNotificationSettingEnabled;
dispatch_semaphore_signal(sem);
}];
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
}
else {
UIUserNotificationSettings *theSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];
alertIsActive = [theSettings types] & UIUserNotificationTypeAlert;
}
return alertIsActive;
}
, но может быть, есть лучшее решение