iOS Launching Settings -> Restrictions URL Scheme

87

Recentemente, descobri o incrível esquema de URL de configurações personalizadas do iOS5 , que pode ser explicado em detalhes neste ótimo site .

Descobri que isso funciona, direcionando o usuário para o aplicativo Configurações do meu aplicativo:

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

Mas não consigo rotear diretamente para o caminho de restrições por meio do pathparâmetro:

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

Alguém encontrou documentação sobre isso ou conseguiu fazer isso funcionar?

Qualquer visão seria muito apreciada. Estou tentando fazer com que o usuário habilite a compra no aplicativo e prefiro que o usuário não clique manualmente em Restrições (o que não é muito óbvio).

kturner
fonte
2
alguém sabe o url do Touch ID e senha?
Fabian Köbel de
1
use isso para id de toque: prefs: root = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746/… )
Fabian Köbel

Respostas:

144

COMO A RESPOSTA DE @Nix Wang , ISSO NÃO É FUNCIONADO NO IOS 10


AVISO: este método não funcionará para dispositivos que executam iOS 5.1 e superior - consulte o comentário de Hlung abaixo.

É possível que o pathcomponente tenha um nome diferente do da seção real, mas também é possível que você não possa acessar essa seção diretamente de um URL. Encontrei uma lista de URLs possíveis e as Restrições não estão nela, talvez ainda não tenha sido descoberta.

Lista de URLs atualmente conhecidos no aplicativo Configurações:

  • prefs: root = General & path = About
  • prefs: root = General & path = ACESSIBILITY
  • prefs: root = AIRPLANE_MODE
  • prefs: root = General & path = AUTOLOCK
  • prefs: root = General & path = USAGE / CELLULAR_USAGE
  • prefs: root = Brightness
  • prefs: root = General & path = Bluetooth
  • prefs: root = General & path = DATE_AND_TIME
  • prefs: root = FACETIME
  • prefs: root = General
  • prefs: root = General & path = Teclado
  • prefs: root = CASTLE
  • prefs: root = CASTLE & path = STORAGE_AND_BACKUP
  • prefs: root = General & path = INTERNATIONAL
  • prefs: root = LOCATION_SERVICES
  • prefs: root = ACCOUNT_SETTINGS
  • prefs: root = MUSIC
  • prefs: root = MUSIC & path = EQ
  • prefs: root = MUSIC & path = VolumeLimit
  • prefs: root = General & path = Network
  • prefs: root = NIKE_PLUS_IPOD
  • prefs: root = NOTES
  • prefs: root = NOTIFICATIONS_ID
  • prefs: root = Phone
  • prefs: root = Fotos
  • prefs: root = General & path = ManagedConfigurationList
  • prefs: root = General & path = Reset
  • prefs: root = Sounds & path = Ringtone
  • prefs: root = Safari
  • prefs: root = General & path = Assistant
  • prefs: root = Sounds
  • prefs: root = General & path = SOFTWARE_UPDATE_LINK
  • prefs: root = STORE
  • prefs: root = TWITTER
  • prefs: root = General & path = USAGE
  • prefs: root = VIDEO
  • prefs: root = General & path = Network / VPN
  • prefs: root = Wallpaper
  • prefs: root = WIFI
  • prefs: root = INTERNET_TETHERING
Henri Normak
fonte
54
Apenas um tipo de aviso, idownloadblog.com/2011/11/29/iphone-5-1-disables-shortcuts disse que todos os esquemas de url para as configurações do iOS serão removidos no iOS5.1 (portanto, urls como prefs: root = General & path = Network não funcionará mais) Portanto, esteja ciente.
Hlung
3
Eles não são completamente removidos, você só precisa colocar esses links de URL em um botão em um UIAlertView. Portanto, basta colocar um aviso no UIAlertView de que o aplicativo irá para segundo plano e as configurações serão abertas e, em seguida, OK e Cancelar etc.
zambono
4
Ele não está mais funcionando, ele estava funcionando em um dos meus aplicativos um tempo atrás, mas não está mais.
zambono
5
No iOS8, você pode iniciar o aplicativo de configurações integrado com o url:[NSURL URLWithString:UIApplicationOpenSettingsURLString]
Jason Moore
2
Qualquer solução / alternativa para ios10, por favor.
ranjit.x.singh
48

No iOS8, você pode abrir o aplicativo de configurações integrado com:

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

A string de URL real é @"app-settings:". Eu tentei anexar diferentes seções à string ("Bluetooth", "GENERAL", etc.), mas parece que apenas o link para a tela principal de Configurações funciona. Poste uma resposta se você descobrir o contrário.

Jason Moore
fonte
10
Isso porque essa chamada específica é o URL de inicialização das configurações. Ele abre as configurações personalizadas do aplicativo, se houver. Caso contrário, basta abrir o aplicativo Configurações na tela principal. developer.apple.com/library/ios/documentation/UIKit/Reference/…
JAL
1
Resposta fantástica se seu aplicativo possui configurações específicas que você deseja ativar / desativar. Tudo em um só lugar e não precisa navegar o usuário pelas Configurações para chegar à configuração desejada. Obrigado!
kyleturner
1
@ FabianKöbel, você conseguiu encontrar um para TouchID e senha?
ShayanK
1
@AspersionCast: você pode usar este: prefs: root = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746/… )
Fabian Köbel
Este parece ser o único método atualmente aprovado pela Apple para iniciar o aplicativo Configurações.
u2Fan
42

Se você adicionar o esquema de URL prefs ao seu aplicativo iOS, isso permitirá que você use todos os esquemas que poderíamos no iOS 5. Eu testei no iOS 9, mas acho que funcionará em versões mais antigas também.

Pedro Tôrres
fonte
Esse truque só funciona a partir do iOS 8, onde não há necessidade.
Valeriy Van
1
Mas mesmo no iOS 8 você não tem permissão para abrir as configurações de WiFi, por exemplo, se você não adicionar essa vergonha de URL ao seu aplicativo.
Pedro Tôrres
Sim você está certo. Não pensei sobre este caso de uso.
Valeriy Van
9
@conorgriffin Para você e qualquer outra pessoa que esteja se perguntando, o cenário vive sob: Metas | (Aplicação) | Info | Tipos de URL | +
Kevin Sylvestre de
Alguém disse que ele foi rejeitado por usar o url "prefs: root". stackoverflow.com/questions/8246070/…
Hlung
33

Atualizar:

prefs: NÃO funcionará desde iOS 10.

Nix Wang
fonte
4
Qual é a alternativa?
OXXY
1
Isso é loucura, já que este Documento oficial da Apple ( developer.apple.com/library/ios/qa/qa1924/_index.html ) endereça propositalmente o problema de preferências, e datado de 02/08/2016.
daspianista
1
Esse documento diz apenas para usá-lo para as configurações do teclado (qualquer coisa que não seja o uso específico é uma violação.)
Peter Johnson
Infelizmente, não parece funcionar nem mesmo para as configurações do teclado no iOS 10.
Intricações
4
Embora prefs:não funcione mais, o seguinte funciona (pelo menos na abertura geral):App-Prefs::root=Settings&path=General
daspianista
22

Sim, vi isso (e muito mais), até mesmo implementei em um aplicativo de teste. Realmente preciso obter a palavra definitiva da Apple, mas a opinião consensual da comunidade é que a Apple desaprovou isso no 5.1 depois que foi publicamente "descoberto / publicado", então aplicativos que o contenham não serão aceitos.

01/08/12 Atualização: Perguntei à Apple por meio de minha conta de desenvolvedor se há uma maneira de iniciar programaticamente a caixa de diálogo Configurações de WiFi. Aqui está a resposta:

"Nossos engenheiros analisaram sua solicitação e concluíram que não há uma maneira compatível de atingir a funcionalidade desejada, dadas as configurações atuais do sistema de remessa."

Dan
fonte
9
Eu recomendo a qualquer pessoa que precise desse recurso registrar um relatório oficial de bug. Quanto mais for relatado, mais visível ficará e melhor será a chance de uma solução compatível ser apresentada no futuro. bugreport.apple.com
Matt Connolly
18

No iOS 9 funciona de novo!

Para abrir Ajustes> Geral> Teclado , eu uso:

prefs:root=General&path=Keyboard

Além disso, é possível ir mais longe para Teclados :

prefs:root=General&path=Keyboard/KEYBOARDS
Mikhail
fonte
Acabei de notar isso no aplicativo PopKey. Tentei o url para Configurações> Configurações de Wi-Fi e funciona bem. Vamos torcer para que isso continue.
Jamie McDaniel
Será que esses esquemas precisam ser adicionados para LSApplicationQueriesSchemesnos info.plist?
Warpling
2
Não, eles não querem. Basta usar o método openURL :.
Mikhail
1
Estou tentando usar isso para criar um link para as configurações de uma página da web e parece funcionar no Safari em um iPhone, mas não em um iPad. Ambos estão em 9.0.2. Sério, Apple?
Randy H.
3
Ainda é necessário adicionar o esquema de URL preferencial para segmentar
shim
7

Eu queria abrir o menu Bluetooth no aplicativo Configurações e o caminho acima (prefs: root = General & path = Bluetooth) não funcionou para mim. O que acabou funcionando para mim foi

UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=Bluetooth")!)

Certifique-se de ter o prefsesquema de URL definido primeiro.

Mahesh
fonte
Isso ocorre porque o menu Bluetooth mudou nas versões recentes do iOS. Agora é uma configuração de nível superior, não em Geral .
Nate
@Imran: Você esqueceu as prefscoisas.
Michael Dorner
5

Solução para iOS10. Funciona bem.

NSURL *URL = [NSURL URLWithString:@"App-prefs:root=TWITTER"];
[[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];
Desenvolvedores de pararmswar
fonte
Isso é legítimo? O envio bem-sucedido do aplicativo não significa que seja legítimo. Pode falhar eventualmente no futuro ..
Stas
@Stas: Não é, pois é uma API privada.
Tejas K
4

A partir do iOS10, você pode usar

UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root")!) 

para abrir as configurações gerais.

também você pode adicionar urls conhecidos (você pode vê-los na resposta mais votada) para abrir configurações específicas. Por exemplo, o seguinte abre o touchID e a senha.

UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root=TOUCHID_PASSCODE")!)
pele de mkeremkes
fonte
1
"App-Prefs: root = TOUCHID_PASSCODE" não funciona no iOS 11. Qualquer outra solução?
myaug
App-Prefsé uma API privada que levará à rejeição do aplicativo durante a revisão.
Tejas K
2

Aqui está outra coisa que encontrei:

  1. Depois de definir o Esquema de URL "prefs", "prefs: root = Safari & path = ContentBlockers" está funcionando no Simulador (iOS 9.1 em inglês ), mas não no Simulador (chinês simplificado) . Basta ir para o Safari, mas não para os bloqueadores de conteúdo. Se seu aplicativo for internacional, tome cuidado.
    Update: Não sei por que, agora não posso mais pular para ContentBlockers, o mesmo código, a mesma versão, não funciona agora. :(

  2. Em dispositivos reais (o meu é o iPhone 6S e o iPad mini 2), "Safari" deve ser "SAFARI" , "Safari" não funciona no dispositivo real, "SAFARI" agora funciona no simulador:

    #if arch(i386) || arch(x86_64)
        // Simulator
        let url = NSURL(string: "prefs:root=Safari")!
    #else
        // Device
        let url = NSURL(string: "prefs:root=SAFARI")!
    #endif
    
    if UIApplication.sharedApplication().canOpenURL(url) {
        UIApplication.sharedApplication().openURL(url)
    }
  3. Até o momento, não foram encontradas diferenças entre o iPhone e o iPad.

Kaiyuan Xu
fonte
Você conseguiu fazer isso funcionar de novo? Uma pena se não!
Ryan Brodie
@RyanBrodie O que você quer dizer com "uma vergonha"?
Kaiyuan Xu
Que pena, seria ótimo vincular diretamente às configurações do Bloqueador de conteúdo do Safari
Ryan Brodie
6
@RyanBrodie Mesmo se pudesse funcionar, sugiro que você não o use para aplicativos da App Store agora, acabei de receber um "rejeitado" do iTunes Connect esta manhã, pois "prefs: root" é uma API privada (há aplicativos usando prefs: root na App Store ... Deus sabe por quê)
Kaiyuan Xu
Não sabia que muito obrigado pelo aviso!
Ryan Brodie
2

Funciona bem para configurações de notificação de aplicativo no IOS 10 (testado)

if(&UIApplicationOpenSettingsURLString != nil){
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}
Mrsantateam
fonte
2

iOS 10

Usar app-prefs:

App-prefs:root=MOBILE_DATA_SETTINGS_ID

Veja a essência

Alex Hedley
fonte
0

Estou atualizando uma notícia aqui. Usar apenas 'prefs:' NÃO é rejeitado pela Apple, eu testei e verifiquei a aprovação para a app store (em agosto de 2016). THX.

KoreanXcodeWorker
fonte
estou usando isso [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=DO_NOT_DISTURB"]];para abrir a configuração DND do dispositivo. A Apple vai rejeitar isso?
Shreyank,
Ele só foi aprovado na revisão ou também funciona? Quero dizer, o openURL leva você para as configurações? Não funcionou do meu lado.
Ahmet Akkök