Відкриття програми "Налаштування" з іншого додатка


180

Гаразд, я знаю, що про це виникає багато питань, але вони всі давно.

Так. Я знаю, що це можливо, оскільки це робить додаток Map.

У програмі Map, якщо я вимкну локалізацію цього додатка, він надішле мені повідомлення, і якщо я натисну добре, відкриється "Налаштування програми". І моє запитання: як це можливо? Як я можу відкрити "Налаштування програми" з власного додатка?

В основному мені потрібно зробити те ж саме, якщо користувач вимкне місце розташування для мого додатка, то я покажу йому повідомлення про щось, що відкриє "Налаштування додатка"



1
Ви можете відкрити програму налаштувань програмно в iOS8 (але не в нижчих версіях iOS). Код нижче у відповідях.
Каран Дуа

Відповіді:


291

Як згадував Каран Дуа , тепер це можливо в iOS8 за допомогою UIApplicationOpenSettingsURLStringдив . Документацію Apple .

Приклад:

Швидкий 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
in swift 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.

Швидкий:

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

Швидкий 4:

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

Swift 4.2 (BETA):

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

Завдання-C:

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

23
Це з'являється, щоб відкрити розділ програми "Налаштування". Користувачам доведеться натиснути Назад кілька разів, щоб побачити головний екран Налаштування.
wjl

1
Невелика корекція ..[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
Пайто

10
@Paito Наведений вище рядок спрямований на приватні налаштування програми . Чи є спосіб перейти до розділу конфіденційності налаштувань пристрою? Будь ласка, коментуйте, якщо знаєте. Це перенаправлення можливо, як я виявив його у програмі Maps, де він спрямований на налаштування розташування в розділі конфіденційності.
Pavan Kotesh

1
Невелика корекція Swift: UIApplication.sharedApplication (). OpenURL (NSURL (рядок: UIApplicationOpenSettingsURLString)!)
vbezhenar

1
@ PavanKotesh- Так, але в налаштуваннях додатка буде те, на що вам потрібен дозвіл, в моєму випадку мені потрібен доступ до контактів, які відображаються в налаштуваннях додатка з вищевказаним кодом.
Теяс К

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


Дякую, працює і для мене, на iOS 6 і 7 теж. Ви намагалися отримати це ще через процес перегляду Apple?
Фло

1
@Flo Я повідомляю вас, тому що зараз я наполягав на бета-тестуванні.
swiftBoy

1
iOS 9.3. Працював як шарм. Я навіть бачу "Назад до [мого імені програми]" всередині програми налаштувань. Звичайно, це підтримується, тому що я бачу безліч інших програм, які роблять подібні речі!
EricWasTaken

13
На iOS 10 новий URL - це не "prefs: root = ....", а "App-Prefs: root = ...".
Дріко

1
Ваш додаток може бути відхилено ... навіть якщо його буде затверджено, його можна буде відхилити в наступній версії, якщо ви використовуєте цей метод ...
Mihir Mehta

18

Ви можете використовувати це на iOS 5.0 та новіших версіях: це більше не працює.

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

3
@MarkGranoff Ні, це здається технічно недокументованим, але це не так вже й погано, як звичайний незадокументований API, оскільки це лише URL-схема. Ви можете перевірити це за допомогою canOpenURL: спочатку. Також тут є нитка про це тут: devforums.apple.com/message/543818
davidcann

3
Ви можете дістатися до різних областей у налаштуваннях відповідно до цієї статті . Наприклад, ця URL-адреса prefs:root=General&path=Bluetooth
переведе

1
Мені було відхилено додаток за використання приватного API, оскільки я відкривав URL: @ "prefs: root = Яскравість". Зазвичай недокументоване означає приватне.
Гійом

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 - Ви знайдете його в Цільовій, Інформаційній, URL-схемі. Потім просто введіть префікси.
  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")!)

Ціль-с

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


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, fillHandler: .none)} } але я пішов на сповіщення в iPhone 6, а не в iPhone 7 плюс?
user3804063

3
Після цього ваш додаток буде відхилено. Вони застосовують приватний API.
Bersaelor

Я відхилив свою програму, використовуючи цей "App-Prefs: root"
Мальдер

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

Бездротові радіо

  • Wi-Fi: 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
  • Сповіщення Su Пропозиції 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
  • Час екрану w час простою: 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
  • Загальне ⇾ Оновлення фонового додатка: 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

Сірі

  • Сірі: prefs:root=SIRI

Яблучний олівець

  • Яблучний олівець (лише для iPad): prefs:root=Pencil

Face ID

  • Ідентифікатор обличчя: prefs:root=PASSCODE

Аварійні SOS

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

Акумулятор

  • Акумулятор: prefs:root=BATTERY_USAGE
  • Акумулятор Health Здоров'я акумулятора (лише для iPhone): prefs:root=BATTERY_USAGE&path=BATTERY_HEALTH

Конфіденційність

  • Конфіденційність: prefs:root=Privacy
  • Конфіденційність Services Послуги з розташування: 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
  • Конфіденційність Reco Розпізнавання мови: prefs:root=Privacy&path=SPEECH_RECOGNITION
  • Конфіденційність ⇾ Камера: prefs:root=Privacy&path=CAMERA
  • Конфіденційність ⇾ Рух: prefs:root=Privacy&path=MOTION\

App Store

  • App Store: prefs:root=STORE
  • App Store Downloads Завантаження програм: 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

Пошта

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

Контакти

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

Календар

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

Примітки

  • Примітки: prefs:root=NOTES
  • Примітки Account Обліковий запис за замовчуванням: 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
  • Примітки ⇾ Сортування перевірених елементів: 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
  • Нагадування List Список за замовчуванням: 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 Zo Масштаб сторінки: prefs:root=SAFARI&path=Page%20Zoom
  • Safari quest Запит веб-сайту на робочому столі: prefs:root=SAFARI&path=Request%20Desktop%20Website
  • Сафарі ⇾ Читач: prefs:root=SAFARI&path=Reader
  • Сафарі ⇾ Камера: prefs:root=SAFARI&path=Camera
  • Сафарі ⇾ Мікрофон: prefs:root=SAFARI&path=Microphone
  • Safari ⇾ Розташування: 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
  • Музика it Обмеження гучності: prefs:root=MUSIC&path=com.apple.Music:VolumeLimit

Телевізор

  • Налаштування ⇾ Телевізор: prefs:root=TVAPP

Фотографії

  • Фотографії: prefs:root=Photos

Камера

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

Книги

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

Ігровий центр

  • Ігровий центр: prefs:root=GAMECENTER

3

UIApplicationOpenSettingsURLStringце буде працювати лише в тому випадку, якщо ви раніше дозволяли будь-який дозвіл. Наприклад, Місцезнаходження, Фото, Контакт, Доступ із повідомленнями Push. Тож якщо у вас немає такого дозволу (і) від користувача:

Якщо iOS 10 або вище ,

Він відкриє "Налаштування", але потім завершить роботу. Причина, в налаштуваннях для вашого додатка немає нічого.

Нижче коду відкриються налаштування вашої програми всередині iOS Setting.

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


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 .

Це працювало зі мною лише тоді, коли налаштування знаходяться у фоновому режимі. Він перенаправить вас до налаштувань сповіщення додатків, але якщо налаштування не працювали у фоновому режимі, вони просто переспрямують вас на налаштування сповіщень взагалі.


1

Ви можете використовувати для цього код нижче.

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

1

SWIFT 4.0

У iOS 10.0 застаріло 'openURL': будь ласка, використовуйте openURL: параметри: завершенняHandler: замість цього

UIApplication.shared.open(URL.init(string: UIApplicationOpenSettingsURLString)! , options: [:], completionHandler: nil)

1

Швидкий 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.


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

Це так, але цей рядок коду направить вас у потрібне місце
Praveen Sharma

1
Так, він вас туди доставить. Я не кажу, що це не працює, я просто вказую, що під час перегляду додатків вас відхилять. "prefs: root" - це приватна URL-схема, згідно з якою нам повідомила команда з огляду. (Можливо, вам пощастить, і вони деякий час не помічають. Ми мали деякий час і пройшли кілька відгуків, перш ніж рецензент помітив це)
Bersaelor

Дякую за інформацію, я б спробував щось інше, але зараз я застряг у підключенні VPN, знаходячи рішення для цього.
Praveen Sharma

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")
})
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.