Программно откройте экран настроек клавиатуры в приложении настроек iOS из другого приложения.

Как мы можем программно перейти непосредственно к любому из указанных ниже экранов приложения настроек iOS?

«Экран введите здесь описание изображения


person iHulk    schedule 28.10.2015    source источник


Ответы (3)


ОБНОВЛЕНИЕ

Как отметили другие пользователи, это решение больше не работает с iOS10. Если у кого-то есть идея, как заставить его работать в iOS10, сообщите нам.

Решение для iOS ‹ 10:

Чтобы открыть настройки (вашего собственного приложения), вы можете использовать константу UIApplicationOpenSettingsURLString:

if let settingsURL = NSURL(string: UIApplicationOpenSettingsURLString) {
    UIApplication.sharedApplication().openURL(settingsURL)
}

Это было представлено в iOS 8, поэтому вы можете использовать его на устройствах с iOS 8 или более поздней версии. Но это только открывает настройки вашего собственного приложения. Не настройки клавиатуры. И если ваше приложение не имеет собственных настроек, оно открывает только приложение «Настройки» на своей главной странице.

В старые времена (до iOS 5.1) вы могли открыть URL-адрес настроек и напрямую перейти практически на любую подстраницу в приложении «Настройки». Apple удалила эту функцию в iOS 5.1.

Однако, похоже, он снова работает в iOS 8 и 9. Это официально не задокументировано Apple, но, похоже, работает, хотя я не уверен, насколько это надежно. Он работает на моем iPhone с iOS 9.1, но не в Симуляторе.

Итак, с осторожностью вы можете попробовать это, чтобы открыть настройки клавиатуры:

if let settingsURL = NSURL(string: "prefs:root=General&path=Keyboard") {
    UIApplication.sharedApplication().openURL(settingsURL)
}

Или еще глубже:

if let settingsURL = NSURL(string: "prefs:root=General&path=Keyboard/KEYBOARDS") {
    UIApplication.sharedApplication().openURL(settingsURL)
}

Редактировать. Как упоминалось в комментариях iHulk, вам, возможно, придется добавить prefs к схемам URL-адресов в файле Info.plist вашего проекта, чтобы это заработало.

person joern    schedule 28.10.2015
comment
Во всяком случае, сделать это в iOS 8, как Fleksy делает это в iOS 8, а также в iOS 9. - person iHulk; 28.10.2015
comment
Вы пробовали это на iOS8? У меня нет под рукой устройства iOS8, чтобы протестировать его. Возможно, это также работает на iOS 8 - person joern; 28.10.2015
comment
хорошо .. Я пытался сделать это симулятор, и он не работал, только что проверил на устройстве iOS 9, и он работает. Я проверю это на устройстве iOS 8 и дам вам знать, работает оно на нем или нет.. Спасибо.. - person iHulk; 28.10.2015
comment
Да, пожалуйста, дайте мне знать, если это работает на iOS8. Спасибо! - person joern; 28.10.2015
comment
Привет, @joern, у меня странная проблема. Я могу перейти на экран настроек, используя приведенный выше код, если Fleksy Keyboard установлена, но если она не установлена, я не могу перейти на экран настроек в своем приложении. Я проверял много раз, и это сбивало меня с толку, не знаю, что сделал Fleksy.. - person iHulk; 09.11.2015
comment
О каком пути вы говорите и что происходит, когда вы пытаетесь его открыть? - person joern; 09.11.2015
comment
Ничего не происходило, canOpenURL возвращал false. Только что нашел один взлом, если вы добавите префы в схему URL, тогда этот URL начнет работать. - person iHulk; 09.11.2015
comment
Не работает на iOS 9.3.1. Я добавил prefs в LSApplicationQueriesSchemes в info.plist, но все равно не работает. - person kelin; 05.04.2016
comment
@kelin, тебе нужно добавить prefs в URL Schemes из Item 0 в URL types - person dimpiax; 10.06.2016
comment
Правильно, не работает в iOS 10. Есть ли решение? - person Ahmet Akkök; 10.10.2016

Начиная с iOS 10 следует использовать «App-Prefs: root», а не «prefs: root». См. ниже код цели C. Протестировано, код работает нормально, но Apple может отклонить приложение из-за этого.
Примечание. Как уже отмечалось, это будет работать только на iOS 10.

 NSString *settingsUrl= @"App-Prefs:root=General&path=Keyboard";

 if ([[UIApplication sharedApplication] respondsToSelector:@selector(openURL:options:completionHandler:)]) {

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:settingsUrl] options:@{} completionHandler:^(BOOL success) {
    NSLog(@"URL opened");
    }];
}
person Ankit J    schedule 01.02.2017

Последнее сообщение, которое я получил от обозревателей Apple: в вашем приложении размещены расширения, но они не соответствуют Руководству по программированию расширений приложений.

В частности, ваше приложение перенаправляет пользователей непосредственно на страницу настроек клавиатуры, а не на конкретную страницу настроек вашего приложения. Пожалуйста, убедитесь, что ваше приложение приводит пользователей только на страницу настроек вашего приложения.

Когда я перенаправлял на: prefs:root=General&path=Keyboard/KEYBOARDS

person mamba    schedule 12.05.2016
comment
@mamba, ты ничего не говорил о такой вещи, как темное освобождение? - person kelin; 10.06.2016
comment
Это странно, потому что клавиатура Flesky позволяет это - person Roymunson; 24.06.2016