Откройте настройки iOS Touch ID программно

Мое приложение использует Touch ID, но если пользователь не включил его, в настоящее время я прошу его вручную открыть приложение "Настройки" и прокрутить вниз до элемента Touch ID.

Есть ли способ напрямую связать их со страницей настроек Touch ID, показанной ниже, из моего приложения?

(Обратите внимание, что я не хочу открывать приложение "Настройки" на верхнем уровне или открывать страницу собственных настроек приложения, как описано в разделе "Можно ли открыть приложение" Настройки "с помощью openURL?".)

Плагин Cordova был бы идеальным, но документация по любому системному вызову iOS была бы отличной.

3 ответа

Решение

К сожалению, невозможно открыть страницу Touch ID.

РЕДАКТИРОВАТЬ: Это было изменено снова под iOS 10, пожалуйста, проверьте ответы ниже.

Apple меняет способ открыть определенное меню в настройках. Значение схемы для iOS 10 - "App-Prefs:". Но, возможно, это будет изменено в следующих версиях.

Вы можете попытаться открыть разные URL в цикле. Помните, что константа UIApplicationOpenSettingsURLString не определена в iOS 7 (если вы поддерживаете эту версию).

Пожалуйста, посмотрите на мой код. Работает на iOS 10 и ниже.

// UIApplicationOpenSettingsURLString is available since iOS 8.0
NSString * defaultSettingsStr = ( &UIApplicationOpenSettingsURLString != NULL ? UIApplicationOpenSettingsURLString : @"prefs:root" );

// Array of possible URLs, differ in various iOS versions
NSArray * urlStrs = @[@"App-Prefs:root=TOUCHID_PASSCODE",
                 @"Prefs:root=TOUCHID_PASSCODE",
                 defaultSettingsStr];

for (NSString * urlStr in urlStrs) {
   NSURL * url = [NSURL URLWithString:urlStr];

   if ([[UIApplication sharedApplication] canOpenURL:url]) {
       // openURL is deprecated since iOS 10
       [[UIApplication sharedApplication] openURL:url];
       break;
   }
}

Это работает для меня:

 NSURL* url = [NSURL URLWithString:@"prefs:root=TOUCHID_PASSCODE"];
 [[UIApplication sharedApplication] openURL:url];

редактировать: я думаю, что это работает только потому, что у меня установлено приложение (Launcher), которое зарегистрировало схему URL prefs. Вышеописанное работало только на устройстве, на котором не было установлено это приложение после того, как я зарегистрировал эту схему в своем собственном приложении, настроив CFBundleURLTypes в моем списке, выполнив следующие действия:

target -> Info -> URL Types -> (add) -> URL Schemes = "prefs"

Другие вопросы по тегам