Открытие приложения «Настройки» из другого приложения

180

Хорошо, я знаю, что есть много вопросов по этому поводу, но все они были много лет назад.

Так. Я знаю, что это возможно, потому что приложение Map делает это.

В приложении «Карта», если я отключаю локализацию для этого приложения, оно отправляет мне сообщение, и если я нажимаю «ОК», откроется «Приложение настроек». И мой вопрос, как это возможно? Как я могу открыть «Настройка приложения» из моего собственного приложения?

По сути, мне нужно сделать то же самое, если пользователь отключит расположение моего приложения, то я покажу ему сообщение о чем-то, что откроет «Настройка приложения».

FelipeDev.-
источник
Проверьте это один stackoverflow.com/questions/377102/…
Yatheesha BL
1
Вы можете открыть приложение настроек программно в iOS8 (но не в более низких версиях iOS). Код ниже в ответах.
Каран Дуа

Ответы:

291

Как отметил Каран Дуа это теперь возможно в iOS8 с использованием UIApplicationOpenSettingsURLStringсм документации компании Apple .

Пример:

Swift 4.2

UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)

В Swift 3:

UIApplication.shared.open(URL(string:UIApplicationOpenSettingsURLString)!)

В Swift 2:

UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)

В Objective-C

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

До iOS 8:

Ты не можешь. Как вы сказали, это уже освещалось много раз, и это всплывающее окно с просьбой включить службы определения местоположения предоставляется Apple, а не самим приложением. Именно поэтому он может открыть приложение настроек.

Вот несколько связанных вопросов и статей:

Можно ли открыть приложение настроек с помощью openURL?

Программно открываем приложение настроек (iPhone)

Как открыть приложение «Настройки», когда пользователь нажимает кнопку?

iPhone: Открытие панели настроек приложения из приложения

Откройте UIPickerView, нажав на запись в настройках приложения - Как?

Открыть приложение «Настройки»?

iOS: вы делаете настройки неправильно

Джо
источник
Если вам нужен более авторитетный ответ, вы можете попробовать задать вопрос на форумах разработчиков Apple < developer.apple.com/devforums > или отправить сообщение об ошибке по адресу < developer.apple.com/bugreporter > - если это известная проблема, ее следует вернуть как "ведет себя правильно" или дубликат оригинальной ошибки.
Винсент Гейбл
2
Теперь это возможно в iOS 8, используя [NSURL URLWithString: UIApplicationOpenSettingsURLString]
LightningStryk
1
быстро 3 - UIApplication.shared.openURL (URL (строка: UIApplicationOpenSettingsURLString)!)
GMHSJ
1
Будьте осторожны с использованием этого метода. Я использовал его, и через несколько месяцев мое приложение было отклонено со следующим сообщением от Apple: Ваше приложение использует непубличную схему URL «prefs: root =», которая является частной сущностью. Использование закрытых API не разрешено в App Store, так как это может привести к ухудшению работы пользователей в случае изменения этих API. Продолжение использования или сокрытие непубличных API в будущих представлениях этого приложения может привести к удалению вашей учетной записи Apple Developer, а также удалению всех связанных приложений из App Store.
Ник Кирстен
133

От @Yatheeshaless «S ответ :

Вы можете открыть приложение настроек программно в iOS8, но не в более ранних версиях iOS.

Swift:

   UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)

Свифт 4:

if let url = NSURL(string: UIApplicationOpenSettingsURLString) as URL? {
    UIApplication.shared.openURL(url)
}

Swift 4.2 (бета):

if let url = NSURL(string: UIApplication.openSettingsURLString) as URL? {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

Objective-C:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
Каран Дуа
источник
23
Это появляется, чтобы открыть раздел вашего приложения приложения Настройки. Пользователям придется несколько раз нажать Назад, чтобы увидеть главный экран настроек.
2011 года
1
Небольшая коррекция ..[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
Пайто
10
@Paito Приведенная выше строка указывает на личные настройки приложения . Есть ли способ перейти в раздел конфиденциальности настроек устройства? Пожалуйста, прокомментируйте, если знаете. Такое перенаправление возможно, как я обнаружил в приложении карт, где оно указывает на настройки местоположения в разделе конфиденциальности.
Паван Котеш
1
Небольшое быстрое исправление: UIApplication.sharedApplication (). OpenURL (NSURL (строка: UIApplicationOpenSettingsURLString)!)
vbezhenar
1
@ PavanKotesh - Да, но настройки приложения будут иметь то, на что вам нужно разрешение, в моем случае мне нужен был доступ к контактам, которые появляются в настройках приложения с приведенным выше кодом.
Tejas K
58

ДА!! Вы можете запустить экран настроек устройства, я протестировал на iOS 9.2

Шаг 1. нам нужно добавить схемы URL

Зайдите в Настройки проекта -> Информация -> Типы URL -> Добавить новые схемы URL

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

Шаг 2. Запустите настройки программно благодаря @davidcann

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];

Также мы можем запускать подэкраны, такие как Музыка, Местоположение и т. Д., Просто используя правильное имя

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=MUSIC"]];

Смотрите этот полный список имен здесь, поделенный Анри Нормак


Обновить:

В соответствии с комментарием каждый хочет знать, что происходит после этого изменения в моем статусе подачи заявки?

Так YES!! I got successful update submission and application is available on store without any complain.

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

! [ВНИМАНИЕ: Ваше приложение может быть отклонено ... даже если оно одобрено, оно может быть отклонено в будущей версии, если вы используете этот метод ...] 4

swiftBoy
источник
Спасибо, у меня работает, на iOS 6 и 7 тоже. Вы уже пытались пройти через процесс проверки Apple?
Flo
1
@Flo, я дам вам знать, потому что в настоящее время я настаивал на бета-тестировании.
swiftBoy
1
iOS 9.3. Работал как шарм. Я даже вижу «Вернуться к [имя моего приложения]» внутри приложения настроек. Конечно, это поддерживается, потому что я вижу множество других приложений, которые делают подобные вещи!
EricWasTaken
13
В iOS 10 новый URL-адрес не «prefs: root = ....», а «App-Prefs: root = ...».
Дрико
1
Ваше приложение может быть отклонено ... даже если оно одобрено, оно может быть отклонено в будущей версии, если вы используете этот метод ...
Михир Мехта
18

Вы можете использовать это на iOS 5.0 и более поздних версиях: это больше не работает.

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
davidcann
источник
3
@MarkGranoff Нет, это технически недокументировано, но это не так плохо, как обычный недокументированный API, так как это просто схема URL. Вы можете проверить это с помощью canOpenURL: сначала. Кроме того, есть нить об этом здесь: devforums.apple.com/message/543818
davidcann
3
Вы можете попасть в разные области в настройках в соответствии с этой статьей . Например, этот URL приведет вас к настройкам Bluetoothprefs:root=General&path=Bluetooth
progrmr
1
Я получил приложение, отклоненное из-за использования частного API, потому что я открывал url: @ "prefs: root = Brightness". Обычно недокументированный означает частный.
Гийом
4
Apple заявила, что это не публичный API, и больше не поддерживается. Существует ошибка, поданная по этому вопросу, номер 11253669.
Дон Уилсон
2
Я только что увидел, что это работает в приложении Strava. Выключите Bluetooth, а затем включите его в приложении. Затем он запрашивает приложение настроек и переходит непосредственно к настройкам Bluetooth. Это для iOS5.1. Есть ли способ узнать, какую схему они используют?
Муравьи
14

обновление iOS 10

Apple изменила метод, чтобы открыть асинхронный в главном потоке. Однако теперь можно открывать настройки приложения только в собственных настройках.

[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];

iOS 9 обновление

Теперь можно перейти непосредственно в меню под-настроек. Тем не менее, схема URL должна быть создана. Это можно сделать двумя способами:

  1. XCode - вы найдете его в Target, Info, URL Scheme. Затем просто введите prefs.
  2. Непосредственно добавление в * -Info.plist. Добавьте следующее: <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>prefs</string> </array> </dict> </array>

Тогда код:

стриж

UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=General&path=Keyboard")!)

Objective-C

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General&path=Keyboard"]];

guyromb
источник
1
Я попробовал решение iOS 10.x, и оно у меня не сработало - ничего не происходит.
Марк Питерс
@MarkPeters, вы уже нашли способ? Это может быть очень полезно. Спасибо.
Roohul Poolak
Нет, не знаю Я до сих пор не знаю, является ли это ошибкой iOS или Apple удалила эту функцию.
Марк Питерс
Я думаю, они все еще работают с расширениями. Приложение Ex находится Magic Launcherв Appstore.
Трайдент
4

В Swift 3 / iOS 10+ это выглядит сейчас

if let url = URL(string: "App-Prefs:root=LOCATION_SERVICES") {
    UIApplication.shared.open(url, completionHandler: .none)
}
Дамо
источник
как попасть на экран уведомлений? потому что если пусть url = URL (строка: «App-Prefs: root = NOTIFICATIONS_ID & path = io.artup.artup») {if #available (iOS 10.0, *) {UIApplication.shared.open (url, creationHandler: .none)} } но я пошел на уведомление в iPhone 6, а не в iPhone 7 плюс?
user3804063
3
Это приведет к отклонению вашего приложения. Они используют частный API.
Берсаэлор
Я получил отклоненное приложение, используя «App-Prefs: root»
Malder
1
Просто подчеркните, что другие упоминали здесь, не используйте этот метод, это отклонит ваше приложение. Повторная отправка приложения с таким закроет ваш аккаунт разработчика.
CodeBrew
4

Свифт 3:

guard let url = URL(string: UIApplicationOpenSettingsURLString) else {return}
if #available(iOS 10.0, *) {
  UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
  // Fallback on earlier versions
  UIApplication.shared.openURL(url)
}
Дуй Доан
источник
4

Похоже, вы можете использовать prefs:<area>URL, чтобы открыть настройки и перейти к определенным областям. Apple может изменить их и сломать ваше приложение, поэтому всегда проверяйте, можете ли вы открыть их первыми.

Из этой статьи они перечислили некоторые из них для iOS 13.1:

URL настроек

ICloud

  • ICloud: prefs:root=CASTLE
  • Резервное копирование iCloud: prefs:root=CASTLE&path=BACKUP

Беспроводные радио

  • Вай-фай: prefs:root=WIFI
  • Bluetooth: prefs:root=Bluetooth
  • Сотовая связь: prefs:root=MOBILE_DATA_SETTINGS_ID

Персональная точка доступа

  • Персональная точка доступа: prefs:root=INTERNET_TETHERING
  • Персональная точка доступа ⇾ Семейный обмен: prefs:root=INTERNET_TETHERING&path=Family%20Sharing
  • Персональная точка доступа Password Пароль Wi-Fi: prefs:root=INTERNET_TETHERING&path=Wi-Fi%20Password

VPN

  • VPN: prefs:root=General&path=VPN

Уведомления

  • Уведомления: prefs:root=NOTIFICATIONS_ID
  • Уведомления ⇾ Siri Предложения: prefs:root=NOTIFICATIONS_ID&path=Siri%20Suggestions

Звуки

  • Звуки: prefs:root=Sounds
  • Мелодия: prefs:root=Sounds&path=Ringtone

Просьба не беспокоить

  • Просьба не беспокоить: prefs:root=DO_NOT_DISTURB
  • Не беспокоить ⇾ Разрешить звонки от: prefs:root=DO_NOT_DISTURB&path=Allow%20Calls%20From

Экранное время

  • Экранное время: prefs:root=SCREEN_TIME
  • Время экрана ⇾ Время простоя: prefs:root=SCREEN_TIME&path=DOWNTIME
  • Время экрана ⇾ Ограничения приложения: prefs:root=SCREEN_TIME&path=APP_LIMITS
  • Время экрана ⇾ Всегда разрешено: prefs:root=SCREEN_TIME&path=ALWAYS_ALLOWED

Общее

  • Общее: prefs:root=General
  • Общее ⇾ О: prefs:root=General&path=About
  • Общее Update Обновление программного обеспечения: prefs:root=General&path=SOFTWARE_UPDATE_LINK
  • Общее ⇾ CarPlay: prefs:root=General&path=CARPLAY
  • General ⇾ Background App Обновить: prefs:root=General&path=AUTO_CONTENT_DOWNLOAD
  • Общие ⇾ Многозадачность (только для iPad): prefs:root=General&path=MULTITASKING
  • Общие ⇾ Дата и время: prefs:root=General&path=DATE_AND_TIME
  • Общие ⇾ Клавиатура: prefs:root=General&path=Keyboard
  • Общее ⇾ Клавиатура ⇾ Клавиатуры: prefs:root=General&path=Keyboard/KEYBOARDS
  • Общее ⇾ Клавиатура ⇾ Аппаратная клавиатура: prefs:root=General&path=Keyboard/Hardware%20Keyboard
  • Общие ⇾ Клавиатура ⇾ Замена текста: prefs:root=General&path=Keyboard/USER_DICTIONARY
  • Общие ⇾ Клавиатура ⇾ Одноручная клавиатура: prefs:root=General&path=Keyboard/ReachableKeyboard
  • Общее ⇾ Язык и регион: prefs:root=General&path=INTERNATIONAL
  • Общий ⇾ Словарь: prefs:root=General&path=DICTIONARY
  • Общие ⇾ Профили: prefs:root=General&path=ManagedConfigurationList
  • Общие ⇾ Сброс: prefs:root=General&path=Reset

Центр управления

  • Центр управления: prefs:root=ControlCenter
  • Центр управления ⇾ Настройка элементов управления: prefs:root=ControlCenter&path=CUSTOMIZE_CONTROLS

дисплей

  • Дисплей: prefs:root=DISPLAY
  • Дисплей ⇾ Автоблокировка: prefs:root=DISPLAY&path=AUTOLOCK
  • Дисплей Size Размер текста: prefs:root=DISPLAY&path=TEXT_SIZE

доступность

  • Доступность: prefs:root=ACCESSIBILITY

Обои на стену

  • Обои на стену: prefs:root=Wallpaper

Siri

  • Siri: prefs:root=SIRI

Яблочный карандаш

  • Apple Pencil (только для iPad): prefs:root=Pencil

ID лица

  • ID лица: prefs:root=PASSCODE

Экстренная SOS

  • Аварийный SOS: prefs:root=EMERGENCY_SOS

аккумулятор

  • Батарея: prefs:root=BATTERY_USAGE
  • Battery ⇾ Battery Health (только для iPhone): prefs:root=BATTERY_USAGE&path=BATTERY_HEALTH

Конфиденциальность

  • Конфиденциальность: prefs:root=Privacy
  • Конфиденциальность ⇾ Местонахождение Услуги: prefs:root=Privacy&path=LOCATION
  • Конфиденциальность ⇾ Контакты: prefs:root=Privacy&path=CONTACTS
  • Конфиденциальность ⇾ Календари: prefs:root=Privacy&path=CALENDARS
  • Конфиденциальность ⇾ Напоминания: prefs:root=Privacy&path=REMINDERS
  • Конфиденциальность ⇾ Фотографии: prefs:root=Privacy&path=PHOTOS
  • Конфиденциальность ⇾ Микрофон: prefs:root=Privacy&path=MICROPHONE
  • Конфиденциальность ⇾ Распознавание речи: prefs:root=Privacy&path=SPEECH_RECOGNITION
  • Конфиденциальность ⇾ Камера: prefs:root=Privacy&path=CAMERA
  • Конфиденциальность ⇾ Движение: prefs:root=Privacy&path=MOTION\

Магазин приложений

  • Магазин приложений: prefs:root=STORE
  • App Store ⇾ Загрузки приложений: prefs:root=STORE&path=App%20Downloads
  • App Store ⇾ Видео Автозапуск: prefs:root=STORE&path=Video%20Autoplay

Бумажник

  • Бумажник: prefs:root=PASSBOOK

Пароли и учетные записи

  • Пароли и учетные записи: prefs:root=ACCOUNTS_AND_PASSWORDS
  • Пароли и учетные записи ⇾ Получить новые данные: prefs:root=ACCOUNTS_AND_PASSWORDS&path=FETCH_NEW_DATA
  • Пароли и учетные записи ⇾ Добавить учетную запись: prefs:root=ACCOUNTS_AND_PASSWORDS&path=ADD_ACCOUNT

почта

  • Mail: prefs:root=MAIL
  • Mail ⇾ Preview: prefs:root=MAIL&path=Preview
  • Mail ⇾ Размах варианты: prefs:root=MAIL&path=Swipe%20Options
  • Почта tifications Уведомления: prefs:root=MAIL&path=NOTIFICATIONS
  • Почта ⇾ Заблокировано: prefs:root=MAIL&path=Blocked
  • Mail ⇾ Приглушенный поток Тема: prefs:root=MAIL&path=Muted%20Thread%20Action
  • Mail ⇾ Параметры заблокированного отправителя: prefs:root=MAIL&path=Blocked%20Sender%20Options
  • Почта ⇾ Отметить адреса: prefs:root=MAIL&path=Mark%20Addresses
  • Mail ⇾ Увеличить уровень цитаты: prefs:root=MAIL&path=Increase%20Quote%20Level
  • Почта ⇾ Включить вложения с ответами: prefs:root=MAIL&path=Include%20Attachments%20with%20Replies
  • Почта ⇾ Подпись: prefs:root=MAIL&path=Signature
  • Почта ⇾ Учетная запись по умолчанию: prefs:root=MAIL&path=Default%20Account

контакты

  • Контакты: prefs:root=CONTACTS

Календарь

  • Календарь: prefs:root=CALENDAR
  • Календарь tern Альтернативные календари: prefs:root=CALENDAR&path=Alternate%20Calendars
  • Календарь ⇾ Синхронизация: prefs:root=CALENDAR&path=Sync
  • Календарь Times Время оповещения по умолчанию: prefs:root=CALENDAR&path=Default%20Alert%20Times
  • Календарь ⇾ Календарь по умолчанию: prefs:root=CALENDAR&path=Default%20Calendar

Ноты

  • Ноты: prefs:root=NOTES
  • Примечания ⇾ Учетная запись по умолчанию: prefs:root=NOTES&path=Default%20Account
  • Примечания ⇾ Пароль: prefs:root=NOTES&path=Password
  • Заметки ⇾ Сортировать заметки по: prefs:root=NOTES&path=Sort%20Notes%20By
  • Примечания ⇾ Новые примечания начинаются с: prefs:root=NOTES&path=New%20Notes%20Start%20With
  • Примечания ort Сортировать отмеченные элементы: prefs:root=NOTES&path=Sort%20Checked%20Items
  • Примечания ⇾ Линии и сетки: prefs:root=NOTES&path=Lines%20%26%20Grids
  • Заметки ⇾ Доступ к заметкам с экрана блокировки: prefs:root=NOTES&path=Access%20Notes%20from%20Lock%20Screen

Напоминания

  • Напоминания: prefs:root=REMINDERS
  • Напоминания ⇾ Список по умолчанию: prefs:root=REMINDERS&path=DEFAULT_LIST

Голосовые заметки

  • Голосовые заметки: prefs:root=VOICE_MEMOS

Телефон

  • Телефон: prefs:root=Phone

Сообщения

  • Сообщения: prefs:root=MESSAGES

FaceTime

  • FaceTime: prefs:root=FACETIME

Карты

  • Карты: prefs:root=MAPS
  • Карты ⇾ Вождение и навигация: prefs:root=MAPS&path=Driving%20%26%20Navigation
  • Карты ⇾ Транзит: prefs:root=MAPS&path=Transit

Компас

  • Компас: prefs:root=COMPASS

Мера

  • Мера: prefs:root=MEASURE

Сафари

  • Сафари: prefs:root=SAFARI
  • Safari ⇾ Блокировщики контента: prefs:root=SAFARI&path=Content%20Blockers
  • Safari ⇾ Загрузки: prefs:root=SAFARI&path=DOWNLOADS
  • Safari ⇾ Закрыть вкладки: prefs:root=SAFARI&path=Close%20Tabs
  • Safari ⇾ Очистить историю и данные: prefs:root=SAFARI&path=CLEAR_HISTORY_AND_DATA
  • Safari ⇾ Page Zoom: prefs:root=SAFARI&path=Page%20Zoom
  • Safari ⇾ Запрос рабочего стола: prefs:root=SAFARI&path=Request%20Desktop%20Website
  • Safari ⇾ Reader: prefs:root=SAFARI&path=Reader
  • Safari ⇾ Камера: prefs:root=SAFARI&path=Camera
  • Safari ⇾ Микрофон: prefs:root=SAFARI&path=Microphone
  • Сафари ⇾ Расположение: prefs:root=SAFARI&path=Location
  • Safari ⇾ Продвинутый: prefs:root=SAFARI&path=ADVANCED

Новости

  • Новости: prefs:root=NEWS

Здоровье

  • Здоровье: prefs:root=HEALTH

Ярлыки

  • Ярлыки: prefs:root=SHORTCUTS

Музыка

  • Музыка: prefs:root=MUSIC
  • Музыка ⇾ Сотовые данные: prefs:root=MUSIC&path=com.apple.Music:CellularData
  • Музыка ⇾ Оптимизация хранилища: prefs:root=MUSIC&path=com.apple.Music:OptimizeStorage
  • Музыка ⇾ EQ: prefs:root=MUSIC&path=com.apple.Music:EQ
  • Музыка ⇾ Предел громкости: prefs:root=MUSIC&path=com.apple.Music:VolumeLimit

телевидение

  • Настройки ⇾ ТВ: prefs:root=TVAPP

Фото

  • Фото: prefs:root=Photos

камера

  • камера: prefs:root=CAMERA
  • Камера ⇾ Запись видео: prefs:root=CAMERA&path=Record%20Video
  • Камера Slo Запись Slo-mo: prefs:root=CAMERA&path=Record%20Slo-mo

книги

  • Книги: prefs:root=IBOOKS

Игровой центр

  • Игровой центр: prefs:root=GAMECENTER
Иэн Смит
источник
3

UIApplicationOpenSettingsURLStringэто будет работать, только если вы ранее разрешили любое разрешение. Например, Местоположение, Фото, Контакт, Доступ к push-уведомлениям. Так что, если у вас нет таких разрешений от пользователя:

Если iOS 10 или выше ,

Он откроет настройки, но затем вылетит. Причина в настройках вашего приложения.

Ниже код откроет настройки вашего приложения в настройках iOS.

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
    [[UIApplication sharedApplication] openURL:url];
}

Из-за недоступности устройства я не смог проверить это на iOS <10.

Кроме того, я мог найти приведенный ниже код из некоторой сущности, и он прекрасно работает на iOS 10. Но я не уверен, одобрит ли это команда проверки Apple или нет.

https://gist.github.com/johnny77221/bcaa5384a242b64bfd0b8a715f48e69f

Hemang
источник
3

В Swift 3 все, что мне нужно, это (здесь, например, перенаправление на уведомления моего приложения):

if let url = URL(string: "App-Prefs:root=NOTIFICATIONS_ID&path=your app bundleID") {
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(url, completionHandler: .none)
    } else {
        // Fallback on earlier versions
    }
}

Источник: phynet gist .

Это работало со мной, только когда настройки в фоновом режиме. Он перенаправит вас к настройкам уведомлений вашего приложения, но если настройки не выполнялись в фоновом режиме, он просто перенаправит вас к настройкам уведомлений в целом.

ynamao
источник
1

Вы можете использовать код ниже для этого.

[[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
Som
источник
1

SWIFT 4.0

'openURL' устарел в iOS 10.0: пожалуйста, используйте openURL: параметры: завершениеHandler: вместо

UIApplication.shared.open(URL.init(string: UIApplicationOpenSettingsURLString)! , options: [:], completionHandler: nil)
Харшил Котеча
источник
1

Swift 4

Я предпочитаю открывать настройки более безопасным способом,

if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) {

    UIApplication.shared.open(settingUrl)
}
else {
    print("Setting URL invalid")
}
Саззад Хисейн Хан
источник
0

Swift Вы можете использовать следующую функцию, чтобы открыть приложение «Настройки» с помощью страницы Bluetooth.

func openSettingsApp(){
    if let settings = NSURL(string: "prefs:root=Bluetooth") {
        UIApplication.sharedApplication().openURL(settings)
    }
}

Опять же, это не откроет настройки приложения. Это откроет приложение настроек с Bluetooth, так как это глубокая связь с Bluetooth.

Alix
источник
0

Протестировано с iOS 10. Работа

NSArray* urlStrings = @[@"prefs:root=WIFI", @"App-Prefs:root=WIFI"];
for(NSString* urlString in urlStrings){
NSURL* url = [NSURL URLWithString:urlString];
if([[UIApplication sharedApplication] canOpenURL:url]){
    [[UIApplication sharedApplication] openURL:url];
    break;
}
}

Удачного кодирования :)

Правин Шарма
источник
3
Это приведет к отклонению вашего приложения. Только что это случилось со мной.
Bersaelor
Это так, но эта строка кода приведет вас прямо к нужному месту
Правин Шарма
1
Да, это доставит вас туда. Я не говорю, что это не работает, я просто указываю, что это отклонит вас во время обзора приложения. "prefs: root" - это схема закрытого URL, в соответствии с тем, что нам рассказала команда проверки. (Возможно, вам повезет, и они некоторое время не замечают, мы
включили
Спасибо за информацию, я бы попробовал что-то еще, но сейчас я застрял в VPN-подключении, находя решение для этого.
Правин Шарма
0

Чтобы добавить к принятому ответу: (из документации Apple для разработчиков) «При открытии URL-адреса, созданного из этой строки (openSettingsURLString), система запускает приложение« Настройки »и отображает пользовательские настройки приложения, если они есть.» Итак, если вы хотите открыть настройки для своего приложения, создайте свой собственный файл Settings.bundle.

Йован Станкович
источник
-1

Добавьте это в свой класс,

 public class func showSettingsAlert(title:String,message:String,onVC viewController:UIViewController,onCancel:(()->())?){
            YourClass.show2ButtonsAlert(onVC: viewController, title: title, message: message, button1Title: "Settings", button2Title: "Cancel", onButton1Click: {
                if let settingsURL = NSURL(string: UIApplicationOpenSettingsURLString){
                    UIApplication.sharedApplication().openURL(settingsURL)
                }
                }, onButton2Click: {
                    onCancel?()
            })
        }

 public class func show2ButtonsAlert(onVC viewController:UIViewController,title:String,message:String,button1Title:String,button2Title:String,onButton1Click:(()->())?,onButton2Click:(()->())?){
            dispatch_async(dispatch_get_main_queue()) {
                let alert : UIAlertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)

                alert.addAction(UIAlertAction(title: button1Title, style:.Default, handler: { (action:UIAlertAction) in
                    onButton1Click?()
                }))

                alert.addAction(UIAlertAction(title: button2Title, style:.Default, handler: { (action:UIAlertAction) in
                    onButton2Click?()
                }))

                viewController.presentViewController(alert, animated: true, completion: nil)
            }
        }

Звони так,

YourClass.showSettingsAlert("App would like to access camera", message: "App would like to access camera desc", onVC: fromViewController, onCancel: {
  print("canceled")
})
Мухаммед Заид Патан
источник