Abrindo o aplicativo Configurações de outro aplicativo


180

Ok, eu sei que há muitas perguntas sobre isso, mas são todas de muito tempo atrás.

Assim. Eu sei que isso é possível porque o aplicativo Map faz isso.

No aplicativo de mapa, se eu desativar a localização desse aplicativo, ele me enviará uma mensagem e, se eu pressionar ok, o "Aplicativo de configurações" será aberto. E minha pergunta é: como isso é possível? Como posso abrir o "Aplicativo de configuração" do meu próprio aplicativo?

Basicamente, eu preciso fazer a mesma coisa; se o usuário desativar o local do meu aplicativo, mostrarei uma mensagem dizendo algo que abrirá o "Aplicativo de configuração"



1
Você pode abrir o aplicativo de configurações de forma programática no iOS8 (mas não nas versões inferiores do iOS). Código abaixo nas respostas.
Karan Dua

Respostas:


291

Como mencionado por Karan Dua este é agora possível em iOS8 usando UIApplicationOpenSettingsURLStringver Documentação da Apple .

Exemplo:

Swift 4.2

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

No Swift 3:

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

No Swift 2:

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

No Objetivo-C

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

Antes do iOS 8:

Você não pode. Como você disse, isso já foi coberto várias vezes e a solicitação para ativar os serviços de localização é fornecida pela Apple e não pelo próprio aplicativo. É por isso que é capaz de abrir o aplicativo de configurações.

Aqui estão algumas perguntas e artigos relacionados:

é possível abrir o aplicativo Configurações usando o openURL?

Abrir programaticamente o aplicativo de configurações (iPhone)

Como posso abrir o aplicativo Configurações quando o usuário pressiona um botão?

iPhone: Abrindo o painel de preferências de aplicativos no aplicativo

Abra o UIPickerView clicando em uma entrada nas preferências do aplicativo - Como?

Abra o aplicativo Configurações?

iOS: você está fazendo configurações erradas


Se precisar de uma resposta mais autorizada, tente perguntar nos fóruns de desenvolvedores da Apple < developer.apple.com/devforums > ou registrando um bug em < developer.apple.com/bugreporter > - se é um problema conhecido, ele deve voltar como "se comporta corretamente" ou uma duplicata do bug original.
Vincent Gable


2
Agora isso é possível no iOS 8 usando [NSURL URLWithString: UIApplicationOpenSettingsURLString]
LightningStryk

1
no swift 3 - UIApplication.shared.openURL (URL (string: UIApplicationOpenSettingsURLString)!)
GMHSJ 4/16

1
Desconfie de usar esse método. Usei-o e, alguns meses depois, meu aplicativo foi rejeitado com a seguinte mensagem da Apple: Seu aplicativo usa o esquema de URL não público "prefs: root =", que é uma entidade privada. O uso de APIs não públicas não é permitido na App Store, pois pode levar a uma má experiência do usuário, caso essas APIs sejam alteradas. Continuar usando ou ocultando APIs não públicas em envios futuros deste aplicativo pode resultar no encerramento da sua conta de desenvolvedor Apple, bem como na remoção de todos os aplicativos associados da App Store.
Nick Kirsten

133

De @Yatheeshaless 's resposta :

Você pode abrir o aplicativo de configurações de forma programática no iOS8, mas não nas versões anteriores do iOS.

Rápido:

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

Swift 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)
}

Objetivo-C:

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

23
Isso parece abrir a seção do seu aplicativo do aplicativo Configurações. Os usuários terão que clicar em Voltar algumas vezes para ver a tela principal de Configurações.
Wjl 25/09/14

1
Correção pequena ..[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
Paito 08/10

10
@ Paito A linha acima está direcionando para as configurações privadas do aplicativo . Existe alguma maneira de direcionar para a seção de privacidade das configurações do dispositivo? Por favor, comente se você souber. Esse redirecionamento é possível, como o encontrei no aplicativo de mapas, onde ele direciona para as configurações de localização na seção de privacidade.
Pavan Kotesh 10/10

1
Correção Swift pequena: UIApplication.sharedApplication (). OpenURL (NSURL (string: UIApplicationOpenSettingsURLString)!)
vbezhenar

1
@ PavanKotesh- Sim, mas as configurações do aplicativo terão a permissão necessária, no meu caso eu precisava de acesso aos contatos, que aparecem nas configurações do aplicativo com o código acima.
Tejas K

58

SIM!! você pode iniciar a tela Configurações do dispositivo, eu testei no iOS 9.2

Etapa 1. precisamos adicionar esquemas de URL

Vá para Configurações do projeto -> Informações -> Tipos de URL -> Adicionar novos esquemas de URL

insira a descrição da imagem aqui

Etapa 2. Inicie as configurações programaticamente Graças a @davidcann

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

Também podemos abrir sub-telas como Música, Local etc., apenas usando o nome próprio

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

Veja esta lista de nomes completa aqui compartilhada por Henri Normak


Atualizar:

De acordo com o comentário, todos querem saber o que acontece após essa alteração no status de envio da minha inscrição?

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

Apenas para confirmar, eu acabei de baixar esta manhã e desabilitei os serviços de Localização e iniciei o aplicativo, que me pediu permissão de localização e, em seguida, meu pop-up de alerta estava lá para me enviar nas configurações -> página de serviços de localização -> Habilitado -> É isso aí!!

! [AVISO: seu aplicativo pode ser rejeitado ... mesmo se for aprovado, pode ser rejeitado em versão futura se você usar esse método ...] 4


Obrigado, funciona para mim também no iOS 6 e 7. Você já tentou passar pelo processo de revisão da Apple?
Flo

1
@ Flo eu vou deixar você saber, porque atualmente eu tenho pressionado para testes beta.
swiftBoy

1
iOS 9.3. Funcionou como um encanto. Eu até vejo "Voltar para [nome do meu aplicativo]" dentro do aplicativo de configurações. Certamente, isso é suportado porque vejo muitos outros aplicativos que fazem esse tipo de coisa!
precisa saber é o seguinte

13
No iOS 10, o novo URL não é "prefs: root = ....", mas "App-Prefs: root = ...".
Drico 28/02

1
Seu aplicativo pode ser rejeitada ... mesmo que seja aprovado, pode ser rejeitada na versão futura, se você usar esse método ...
Mihir Mehta

18

Você pode usar isso no iOS 5.0 e posterior: isso não funciona mais.

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

3
@ MarkGranoff Não, parece tecnicamente não documentado, mas não é tão ruim quanto uma API não documentada normal, pois é apenas um esquema de URL. Você pode verificar isso com canOpenURL: primeiro. Além disso, há uma discussão sobre isso aqui: devforums.apple.com/message/543818
davidcann

3
Você pode acessar diferentes áreas nas configurações, de acordo com este artigo . Por exemplo, este URL leva você às configurações de Bluetoothprefs:root=General&path=Bluetooth
progrmr 10/11/11

1
Eu recebi um aplicativo rejeitado por usar a API privada porque estava abrindo a URL: @ "prefs: root = Brightness". Normalmente, não documentado significa privado.
Guillaume

4
A Apple afirmou que essa não era uma API pública e não é mais suportada. Há um bug arquivado sobre esta questão, o número 11253669.
Don Wilson

2
Acabei de ver que isso funciona no aplicativo Strava. Desative o Bluetooth e ligue-o no aplicativo. Em seguida, ele pede para chegar ao aplicativo de configurações e vai diretamente para as configurações de Bluetooth. Isto é para iOS5.1. Existe uma maneira de descobrir qual esquema eles estão usando?
Formigas

14

atualização para iOS 10

A Apple alterou o método para abrir a assíncrona no segmento principal. No entanto, a partir de agora só é possível abrir as configurações do aplicativo nas configurações nativas.

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

atualização para iOS 9

Agora é possível ir diretamente para o menu de sub-configurações. No entanto, um esquema de URL deve ser criado. Isso pode ser feito de duas maneiras:

  1. XCode - Você o encontrará em Destino, Informações, Esquema de URL. Então, apenas digite prefs.
  2. Adicionando diretamente ao * -Info.plist. Adicione o seguinte: <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>prefs</string> </array> </dict> </array>

Então o código:

Rápido

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

Objetivo-c

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


1
Tentei a solução iOS 10.x e não funcionou para mim - nada acontece.
27616 Mark Peters

@ MarkPeters, você já descobriu uma maneira? Poderia ser de grande ajuda. Obrigado.
Roohul Poolak 29/09/16

Não, não tenho. Ainda não sei se é um bug do iOS ou se a Apple acabou de remover o recurso.
Mark Peters

Eu acho que eles ainda trabalham com extensões. O aplicativo Ex está Magic Launcherna Appstore.
Trident

4

No Swift 3 / iOS 10+, isso agora parece

if let url = URL(string: "App-Prefs:root=LOCATION_SERVICES") {
    UIApplication.shared.open(url, completionHandler: .none)
}

como chegar à tela de notificação? porque if url = URL (string: "App-Prefs: root = NOTIFICATIONS_ID & path = io.artup.artup") {if #available (iOS 10.0, *) {UIApplication.shared.open (url, completeHandler: .none)} } mas fui para a notificação no iPhone 6 e não no iPhone 7 plus?
user3804063

3
Isso fará com que seu aplicativo seja rejeitado. Eles o colocam em uso de API privada.
Bersaelor


1
Apenas enfatize o que os outros mencionaram aqui, não use esse método, pois seu aplicativo será rejeitado. O envio repetido de aplicativos com essa opção fechará sua conta de desenvolvedor.
CodeBrew 8/01/19

4

Swift 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

Parece que você pode usar o prefs:<area>URL para abrir as configurações e ir para áreas específicas. A Apple pode alterá-las e interromper seu aplicativo. Verifique sempre se é possível abri-las primeiro.

Neste artigo, eles listaram alguns deles para o iOS 13.1:

URLs de configurações

iCloud

  • iCloud: prefs:root=CASTLE
  • Backup do iCloud: prefs:root=CASTLE&path=BACKUP

Rádios sem fio

  • Wi-fi: prefs:root=WIFI
  • Bluetooth: prefs:root=Bluetooth
  • Celular: prefs:root=MOBILE_DATA_SETTINGS_ID

Hotspot pessoal

  • Hotspot pessoal: prefs:root=INTERNET_TETHERING
  • Ponto de acesso pessoal Sharing Compartilhamento familiar: prefs:root=INTERNET_TETHERING&path=Family%20Sharing
  • Hotspot pessoal Password Senha Wi-Fi: prefs:root=INTERNET_TETHERING&path=Wi-Fi%20Password

VPN

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

Notificações

  • Notificações: prefs:root=NOTIFICATIONS_ID
  • Notificações ⇾ Sugestões Siri: prefs:root=NOTIFICATIONS_ID&path=Siri%20Suggestions

Sons

  • Sons: prefs:root=Sounds
  • Toque: prefs:root=Sounds&path=Ringtone

Não perturbe

  • Não perturbe: prefs:root=DO_NOT_DISTURB
  • Não perturbe ⇾ Permitir chamadas de: prefs:root=DO_NOT_DISTURB&path=Allow%20Calls%20From

Tempo da tela

  • Tempo da tela: prefs:root=SCREEN_TIME
  • Tempo da tela, tempo de inatividade: prefs:root=SCREEN_TIME&path=DOWNTIME
  • Tempo da tela ⇾ Limites do aplicativo: prefs:root=SCREEN_TIME&path=APP_LIMITS
  • Tempo da tela ⇾ sempre permitido: prefs:root=SCREEN_TIME&path=ALWAYS_ALLOWED

Geral

  • Geral: prefs:root=General
  • Geral ⇾ Sobre: prefs:root=General&path=About
  • Geral Update Atualização de software: prefs:root=General&path=SOFTWARE_UPDATE_LINK
  • Geral ⇾ CarPlay: prefs:root=General&path=CARPLAY
  • Geral ⇾ Atualização do aplicativo em segundo plano: prefs:root=General&path=AUTO_CONTENT_DOWNLOAD
  • Geral ⇾ Multitarefa (somente iPad): prefs:root=General&path=MULTITASKING
  • Geral ⇾ Data e hora: prefs:root=General&path=DATE_AND_TIME
  • Geral ⇾ Teclado: prefs:root=General&path=Keyboard
  • Geral ⇾ Teclado ⇾ Teclados: prefs:root=General&path=Keyboard/KEYBOARDS
  • Geral ⇾ Teclado ⇾ Hardware Teclado: prefs:root=General&path=Keyboard/Hardware%20Keyboard
  • Geral ⇾ Teclado Replacement Substituição de texto: prefs:root=General&path=Keyboard/USER_DICTIONARY
  • Geral ⇾ Teclado Keyboard Teclado de uma mão: prefs:root=General&path=Keyboard/ReachableKeyboard
  • Geral ⇾ Idioma e região: prefs:root=General&path=INTERNATIONAL
  • Geral ⇾ Dicionário: prefs:root=General&path=DICTIONARY
  • Geral ⇾ Perfis: prefs:root=General&path=ManagedConfigurationList
  • Geral ⇾ Reset: prefs:root=General&path=Reset

Centro de Controle

  • Centro de Controle: prefs:root=ControlCenter
  • Control Center ⇾ Personalizar controles: prefs:root=ControlCenter&path=CUSTOMIZE_CONTROLS

Exibição

  • Exibição: prefs:root=DISPLAY
  • Visor Lock Bloqueio automático: prefs:root=DISPLAY&path=AUTOLOCK
  • Visor Size Tamanho do texto: prefs:root=DISPLAY&path=TEXT_SIZE

Acessibilidade

  • Acessibilidade: prefs:root=ACCESSIBILITY

Papel de parede

  • Papel de parede: prefs:root=Wallpaper

Siri

  • Siri: prefs:root=SIRI

Lápis de maçã

  • Lápis Apple (somente iPad): prefs:root=Pencil

ID do rosto

  • ID da face: prefs:root=PASSCODE

SOS de emergência

  • SOS de emergência: prefs:root=EMERGENCY_SOS

Bateria

  • Bateria: prefs:root=BATTERY_USAGE
  • Bateria Health Funcionamento da bateria (somente iPhone): prefs:root=BATTERY_USAGE&path=BATTERY_HEALTH

Privacidade

  • Privacidade: prefs:root=Privacy
  • Privacidade ⇾ Serviços de localização: prefs:root=Privacy&path=LOCATION
  • Privacidade ⇾ Contatos: prefs:root=Privacy&path=CONTACTS
  • Privacidade ⇾ Calendários: prefs:root=Privacy&path=CALENDARS
  • Privacidade ⇾ Lembretes: prefs:root=Privacy&path=REMINDERS
  • Privacidade ⇾ Fotos: prefs:root=Privacy&path=PHOTOS
  • Privacidade ⇾ Microfone: prefs:root=Privacy&path=MICROPHONE
  • Privacidade ⇾ Reconhecimento de fala: prefs:root=Privacy&path=SPEECH_RECOGNITION
  • Privacidade ⇾ Câmera: prefs:root=Privacy&path=CAMERA
  • Privacidade ⇾ Movimento: prefs:root=Privacy&path=MOTION\

Loja de aplicativos

  • Loja de aplicativos: prefs:root=STORE
  • App Store Downloads Download de aplicativos: prefs:root=STORE&path=App%20Downloads
  • App Store opl Reprodução automática de vídeo: prefs:root=STORE&path=Video%20Autoplay

Carteira

  • Carteira: prefs:root=PASSBOOK

Senhas e contas

  • Senhas e contas: prefs:root=ACCOUNTS_AND_PASSWORDS
  • Senhas e contas ⇾ Buscar novos dados: prefs:root=ACCOUNTS_AND_PASSWORDS&path=FETCH_NEW_DATA
  • Senhas e contas ⇾ Adicionar conta: prefs:root=ACCOUNTS_AND_PASSWORDS&path=ADD_ACCOUNT

Enviar

  • Enviar: prefs:root=MAIL
  • Correio ⇾ Pré-visualização: prefs:root=MAIL&path=Preview
  • Correio ⇾ Opções de furto: prefs:root=MAIL&path=Swipe%20Options
  • Correio ⇾ Notificações: prefs:root=MAIL&path=NOTIFICATIONS
  • Correio ⇾ Bloqueado: prefs:root=MAIL&path=Blocked
  • Correio Mail Ação de segmento desativado: prefs:root=MAIL&path=Muted%20Thread%20Action
  • Correio Options Opções de Remetente Bloqueado: prefs:root=MAIL&path=Blocked%20Sender%20Options
  • Correio ⇾ Marcar endereços: prefs:root=MAIL&path=Mark%20Addresses
  • Correio ⇾ Aumentar o nível de cotação: prefs:root=MAIL&path=Increase%20Quote%20Level
  • Correio ⇾ Incluir anexos com respostas: prefs:root=MAIL&path=Include%20Attachments%20with%20Replies
  • Correio ⇾ Assinatura: prefs:root=MAIL&path=Signature
  • Correio Account Conta Padrão: prefs:root=MAIL&path=Default%20Account

Contatos

  • Contatos: prefs:root=CONTACTS

Calendário

  • Calendário: prefs:root=CALENDAR
  • Calendário Cal Calendários alternativos: prefs:root=CALENDAR&path=Alternate%20Calendars
  • Calendário ⇾ Sincronização: prefs:root=CALENDAR&path=Sync
  • Calendário Times Horário de alerta padrão: prefs:root=CALENDAR&path=Default%20Alert%20Times
  • Calendário Calendar Calendário padrão: prefs:root=CALENDAR&path=Default%20Calendar

Notas

  • Notas: prefs:root=NOTES
  • Notas Account Conta padrão: prefs:root=NOTES&path=Default%20Account
  • Notas ⇾ Senha: prefs:root=NOTES&path=Password
  • Notas ⇾ Classificar notas por: prefs:root=NOTES&path=Sort%20Notes%20By
  • Notas ⇾ Novas notas começam com: prefs:root=NOTES&path=New%20Notes%20Start%20With
  • Notas ⇾ Classificar itens marcados: prefs:root=NOTES&path=Sort%20Checked%20Items
  • Notas ⇾ Linhas e grades: prefs:root=NOTES&path=Lines%20%26%20Grids
  • Notas ⇾ Acesse as notas da tela de bloqueio: prefs:root=NOTES&path=Access%20Notes%20from%20Lock%20Screen

Lembretes

  • Lembretes: prefs:root=REMINDERS
  • Lembretes List Lista Padrão: prefs:root=REMINDERS&path=DEFAULT_LIST

Memorandos de voz

  • Memorandos de voz: prefs:root=VOICE_MEMOS

telefone

  • Telefone: prefs:root=Phone

Mensagens

  • Mensagens: prefs:root=MESSAGES

Facetime

  • Facetime: prefs:root=FACETIME

Mapas

  • Mapas: prefs:root=MAPS
  • Mapas ⇾ Condução e Navegação: prefs:root=MAPS&path=Driving%20%26%20Navigation
  • Mapas ⇾ Trânsito: prefs:root=MAPS&path=Transit

Bússola

  • Bússola: prefs:root=COMPASS

A medida

  • A medida: prefs:root=MEASURE

Safári

  • Safári: prefs:root=SAFARI
  • Safari ⇾ Bloqueadores de conteúdo: prefs:root=SAFARI&path=Content%20Blockers
  • Safari ⇾ Downloads: prefs:root=SAFARI&path=DOWNLOADS
  • Safari ⇾ Fechar separadores: prefs:root=SAFARI&path=Close%20Tabs
  • Safari ⇾ Limpar histórico e dados: prefs:root=SAFARI&path=CLEAR_HISTORY_AND_DATA
  • Safari Zoom Zoom da página: prefs:root=SAFARI&path=Page%20Zoom
  • Safari ⇾ Solicitar site da área de trabalho: prefs:root=SAFARI&path=Request%20Desktop%20Website
  • Safari ⇾ Reader: prefs:root=SAFARI&path=Reader
  • Safari ⇾ Câmera: prefs:root=SAFARI&path=Camera
  • Safari ⇾ Microfone: prefs:root=SAFARI&path=Microphone
  • Safari ⇾ Localização: prefs:root=SAFARI&path=Location
  • Safari ⇾ Avançado: prefs:root=SAFARI&path=ADVANCED

Notícia

  • Notícia: prefs:root=NEWS

Saúde

  • Saúde: prefs:root=HEALTH

Atalhos

  • Atalhos: prefs:root=SHORTCUTS

Música

  • Música: prefs:root=MUSIC
  • Música, dados celulares: prefs:root=MUSIC&path=com.apple.Music:CellularData
  • Música ⇾ Otimizar armazenamento: prefs:root=MUSIC&path=com.apple.Music:OptimizeStorage
  • Música ⇾ EQ: prefs:root=MUSIC&path=com.apple.Music:EQ
  • Música Lim Limite de volume: prefs:root=MUSIC&path=com.apple.Music:VolumeLimit

televisão

  • Configurações ⇾ TV: prefs:root=TVAPP

Fotos

  • Fotos: prefs:root=Photos

Câmera

  • Câmera: prefs:root=CAMERA
  • Câmera ⇾ Gravar vídeo: prefs:root=CAMERA&path=Record%20Video
  • Câmera ⇾ Gravação em câmara lenta: prefs:root=CAMERA&path=Record%20Slo-mo

Livros

  • Livros: prefs:root=IBOOKS

Centro de jogos

  • Centro de jogos: prefs:root=GAMECENTER

3

UIApplicationOpenSettingsURLStringisso só funcionará se você tiver permitido anteriormente alguma permissão. Por exemplo, Localização, Foto, Contato, Acesso à notificação por push. Portanto, se você não tiver essa permissão do usuário:

Se o iOS 10 ou superior ,

Ele abrirá as configurações, mas depois travará. O motivo, não há nada nas configurações do seu aplicativo.

O código abaixo abrirá as configurações do seu aplicativo dentro da configuração do iOS.

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

Devido à indisponibilidade do dispositivo, não foi possível verificar isso no iOS <10.

Além disso, eu poderia encontrar o código abaixo de alguma essência e funciona bem no iOS 10 também. Mas não tenho certeza se isso será aprovado pela equipe de revisão da Apple ou não.

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


3

No Swift 3, tudo o que eu precisava é este (aqui, por exemplo, redirecionar para as notificações do meu aplicativo):

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
    }
}

Fonte: phynet gist .

Isso funcionou comigo apenas quando as configurações estão em segundo plano. Ele o redirecionará para as configurações de notificação do aplicativo, mas se as configurações não estiverem sendo executadas em segundo plano, apenas o redirecionará para as configurações de notificação em geral.


1

Você pode usar o código abaixo para isso.

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

1

SWIFT 4.0

'openURL' foi descontinuado no iOS 10.0: use openURL: options: complementHandler: em vez disso

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

1

Swift 4

Eu prefiro abrir a configuração de uma maneira mais segura,

if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) {

    UIApplication.shared.open(settingUrl)
}
else {
    print("Setting URL invalid")
}

0

Swift Você pode usar a seguinte função para abrir o aplicativo Configurações com a página Bluetooth

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

Novamente, isso não abriria as configurações do aplicativo. Isso abriria o aplicativo de configurações com Bluetooth, pois é um link direto para o bluetooth.


0

Testado com iOS 10. Trabalhando

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;
}
}

Happy Coding :)


3
Isso fará com que seu aplicativo seja rejeitado. Só tinha acontecido comigo.
Bersaelor

É isso mesmo, mas esta linha de código o levará diretamente para o local desejado
Praveen Sharma

1
Sim, você chegará lá. Não estou dizendo que não funciona, apenas estou apontando que você será rejeitado durante a revisão do aplicativo. "prefs: root" é um esquema de URL privado, de acordo com o que a equipe de revisão nos disse. (Você pode ter sorte e eles não percebem por um tempo, tivemos o recurso por um tempo e passou vários comentários antes de o revisor notado)
Bersaelor

Obrigado pela informação, eu tentaria outra coisa, mas agora estou preso na conectividade VPN, encontrando uma solução para isso.
Praveen Sharma

0

Para adicionar à resposta aceita: (da documentação do desenvolvedor da apple) "Quando você abre o URL criado a partir dessa string (openSettingsURLString), o sistema inicia o aplicativo Configurações e exibe as configurações personalizadas do aplicativo, se houver alguma." Portanto, se você deseja abrir as configurações do seu aplicativo, crie seu próprio Settings.bundle.


-1

Adicione isso à sua turma,

 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)
            }
        }

Ligue assim,

YourClass.showSettingsAlert("App would like to access camera", message: "App would like to access camera desc", onVC: fromViewController, onCancel: {
  print("canceled")
})
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.