que erro você está tendo? Esta não é uma pergunta sobre o xcode .
JAL
Ele falha "se UIApplication.sharedApplication (). CanOpenURL (instagramURL!)" A verificação
Sk.Azad 22/15/15
Por favor, consulte o artigo aqui: awkwardhare.com/post/121196006730/... Em iOS 9 você deve especificar o url esquemas seu aplicativo está procurando (eu não fiz isso sozinho)
thelaws
3
Adicione isso ao seu arquivo info.plist <key> LSApplicationQueriesSchemes </key> <array> <string> URLScma1 </string> <string> URLScma2 </string> <string> URLScma3 </string> </array>
Kamleshwar
Respostas:
210
O iOS 9 fez uma pequena alteração no tratamento do esquema de URL. Você deve colocar na lista branca os URLs que seu aplicativo chamará usando a LSApplicationQueriesSchemeschave no seu Info.plist.
Se você chamar o método "canOpenURL" em um URL que não esteja na sua lista de permissões, ele retornará "NÃO", mesmo se houver um aplicativo instalado registrado para lidar com esse esquema. Uma entrada syslog "Este aplicativo não tem permissão para consultar o esquema xxx" será exibida.
Se você chamar o método "openURL" em um URL que não esteja na sua lista de permissões, ele falhará silenciosamente. Uma entrada syslog "Este aplicativo não tem permissão para consultar o esquema xxx" será exibida.
O autor também especula que esse é um bug do sistema operacional e a Apple corrigirá isso em uma versão subsequente.
Como ponto de esclarecimento, NÃO inclua ": //" na sequência de um aplicativo específico a ser incluído na lista de permissões na matriz LSApplicationQueriesSchemes, ou seja, "comgooglemaps: //". Se você incluir ": //", canOpenUrl: retornará NÃO e fornecerá o syslog / erro "Este aplicativo não tem permissão para consultar o esquema xxx". No entanto, ao fazer a chamada real de canOpenUrl: você ainda deve incluir os dois pontos, ou seja, canOpenUrl: @ "comgooglemaps:".
EmphaticArmPump
5
De fato, a Apple corrigiu isso em uma atualização recente. -openURL:sempre funciona mesmo que -canOpenURL:seja limitado.
Tim Johnsen
Qual o sentido disso? Onde está a segurança se eu puder listar tudo na lista e ainda assim consultá-la?
Maciej Swic
@MaciejSwic Uma razão é que você não pode alterar a lista sem reenviar para a Apple.
Thelaws
Observe que tudo isso está relacionado a aplicativos compilados apenas no iOS SDK 9. "Se você não estiver recompilando com o iOS SDK 9.0, seu aplicativo está limitado a 50 esquemas distintos (as chamadas para canOpenURL depois retornam NO)", conforme especificado em developers.facebook.com/docs/ios/ios9
mkll
158
Como dito acima, você deseja adicionar uma chave no info info, aqui está a lista para a maioria das redes sociais
mas se eu quiser redirecionar para qualquer página do livro de rosto como " facebook.com/....",After acrescentando fb apenas a sua wrkng
siva krishna
Quase bom. No Octobr 2015, recebi algumas falhas com URLs estranhos nos diálogos de compartilhamento do Facebook. Eu os adicionei como resposta, fique à vontade para adicioná-lo ao seu, o que é realmente correto.
elbuild
1
e Ha://add/[username]adicionar amigos snapchat no swift 3
EssamSoft 6/17/17
87
Este é um novo recurso de segurança do iOS 9. Assista à WWDC 2015 Session 703 para obter mais informações.
Qualquer aplicativo criado com o SDK 9 precisa fornecer uma LSApplicationQueriesSchemesentrada em seu arquivo plist, declarando quais esquemas ele tenta consultar.
Para esclarecer as coisas. Isso excluirá os aplicativos que permitem ao usuário inserir seu próprio esquema de URL + executar isso?
Jonny
@ Jonny Não, porque você ainda pode tentar abrir qualquer URL usando openURL:. E ele dirá se a abertura foi bem-sucedida ou não.
Leo Natan
Sim, mas o canOpenURL não pode ser usado, por isso não podemos dizer ao usuário se ele funcionará ou não, ele apenas precisa tentar por si mesmo.
Jonny
Quero abrir o google maps, o que devo colocar no urlscheme?
coding22
25
Supondo dois aplicativos TestA e TestB. TestB quer consultar se TestA está instalado. "TestA" define o seguinte esquema de URL em seu arquivo info.plist:
Mas isso normalmente retornará NO no iOS9 porque "TestA" precisa ser adicionado à entrada LSApplicationQueriesSchemes no arquivo info.plist do TestB. Isso é feito adicionando o seguinte código ao arquivo info.plist do TestB:
aguarde, não deve ser o valor da string da chave LSApplicationQueriesSchemes como "testA" no into.plist do aplicativo TestB?
Nik Yekimov
22
De, Sessão 703 WWDC 2015:
Você pode continuar usando esquemas de URL quando criar seu aplicativo para iOS 9 e quiser chamar esquemas de URL. Agora, será necessário declará-los no Info.plist dos aplicativos. Há uma nova chave e LSApplicationQueriesSchemes, aqui, você precisará adicionar a lista de esquemas em que você pode ativar o canOpenURL.
Sim, não é isso. Ele ainda não vai funcionar comgooglemaps, mesmo com o info.plist
Radu
você encontrou uma correção para isso?
Salman Hasrat Khan
1
uma imagem vale mais que 1000 palavras. obrigado pela captura de tela. era tudo que eu precisava.
precisa saber é o seguinte
3
O compartilhamento no Facebook a partir de um diálogo de compartilhamento falha mesmo com a resposta @Matthieu (que é 100% correta para o restante dos URLs sociais). Eu tive que adicionar um conjunto de URL que inverti do Facebook SDK.
É importante observar que houve um erro nos telefones com jailbreak no 9.0.x que quebrou os esquemas de URL. Se você estiver executando um dispositivo jailbroken, atualize o Patcyh no Cydia
Bem, você pode abrir um aplicativo ligando openURL:ou openURL:options:completionHandler:(iOS 10 em diante) diretamente sem fazer a verificação condicional canOpenURL:. Leia a seção de discussão no documento da Apple para o método canOpenURL: que diz:
o método openURL: não é limitado pelo LSApplicationQueriesSchemesrequisito.
Parece que ninguém abordou como especificar URLs com parâmetros incorporados. Qualquer URL que contenha parâmetros, não será possível especificar a URL específica em LSApplicationsQueriesSchemes. Por exemplo, suponha que eu tenha um aplicativo de email que transmita o endereço de email dos remetentes:
Hã? O que você deve adicionar na lista é myemail. Os parâmetros não desempenham nenhum papel aqui.
Leo Natan
0
A Apple alterou o método canOpenURL no iOS 9. Os aplicativos que estão verificando os Esquemas de URL no iOS 9 e iOS 10 precisam declarar esses Esquemas à medida que são enviados à Apple.
Quando tentei ligar para o Facebook a partir do meu próprio aplicativo hoje, descobri que não havia uma LSApplicationQueriesSchemeschave que eu pudesse adicionar ao Info.plist(Xcode Versão 8.2.1 (8C1002)). Abri o Info.plistcom Sublime Text e o adicionei manualmente ao arquivo, depois funcionou. Apenas para que você saiba que, se não conseguir encontrar a chave, basta adicioná-la.
+canOpenURL:
retorna?Respostas:
O iOS 9 fez uma pequena alteração no tratamento do esquema de URL. Você deve colocar na lista branca os URLs que seu aplicativo chamará usando a
LSApplicationQueriesSchemes
chave no seuInfo.plist
.Consulte a publicação aqui: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes
A principal conclusão é que:
O autor também especula que esse é um bug do sistema operacional e a Apple corrigirá isso em uma versão subsequente.
fonte
-openURL:
sempre funciona mesmo que-canOpenURL:
seja limitado.Como dito acima, você deseja adicionar uma chave no info info, aqui está a lista para a maioria das redes sociais
* Os três primeiros jogos do Facebook (FBSDK 4.6): fbapi, fbauth2, fbshareextension. "Ha" é para snapchat
fonte
Ha://add/[username]
adicionar amigos snapchat no swift 3Este é um novo recurso de segurança do iOS 9. Assista à WWDC 2015 Session 703 para obter mais informações.
Qualquer aplicativo criado com o SDK 9 precisa fornecer uma
LSApplicationQueriesSchemes
entrada em seu arquivo plist, declarando quais esquemas ele tenta consultar.fonte
openURL:
. E ele dirá se a abertura foi bem-sucedida ou não.Supondo dois aplicativos TestA e TestB. TestB quer consultar se TestA está instalado. "TestA" define o seguinte esquema de URL em seu arquivo info.plist:
O segundo aplicativo "TestB" tenta descobrir se "TestA" está instalado chamando:
Mas isso normalmente retornará NO no iOS9 porque "TestA" precisa ser adicionado à entrada LSApplicationQueriesSchemes no arquivo info.plist do TestB. Isso é feito adicionando o seguinte código ao arquivo info.plist do TestB:
Uma implementação operacional pode ser encontrada aqui: https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example
fonte
De, Sessão 703 WWDC 2015:
fonte
O compartilhamento no Facebook a partir de um diálogo de compartilhamento falha mesmo com a resposta @Matthieu (que é 100% correta para o restante dos URLs sociais). Eu tive que adicionar um conjunto de URL que inverti do Facebook SDK.
fonte
No Swift 4.2 e no Xcode 10.1
Em info.plist é necessário adicionar CFBundleURLSchemes e LSApplicationQueriesSchemes.
-> Selecione info.plist no seu projeto,
-> clique direito,
-> Selecione Abrir como código-fonte
Veja a captura de tela abaixo
-> arquivo xml será aberto
-> copiar - cole o código abaixo e substitua pelo seu ID
CFBundleURLSchemes e LSApplicationQueriesSchemes para gmail, fb, twitter e vinculados em.
Veja na tela abaixo seu arquivo info.plist final .
fonte
É importante observar que houve um erro nos telefones com jailbreak no 9.0.x que quebrou os esquemas de URL. Se você estiver executando um dispositivo jailbroken, atualize o Patcyh no Cydia
fonte
Bem, você pode abrir um aplicativo ligando
openURL:
ouopenURL:options:completionHandler:
(iOS 10 em diante) diretamente sem fazer a verificação condicionalcanOpenURL:
. Leia a seção de discussão no documento da Apple para o método canOpenURL: que diz:fonte
Parece que ninguém abordou como especificar URLs com parâmetros incorporados. Qualquer URL que contenha parâmetros, não será possível especificar a URL específica em LSApplicationsQueriesSchemes. Por exemplo, suponha que eu tenha um aplicativo de email que transmita o endereço de email dos remetentes:
A única maneira de fazê-lo funcionar no iOS9 é remover quaisquer parâmetros.
fonte
myemail
. Os parâmetros não desempenham nenhum papel aqui.A Apple alterou o método canOpenURL no iOS 9. Os aplicativos que estão verificando os Esquemas de URL no iOS 9 e iOS 10 precisam declarar esses Esquemas à medida que são enviados à Apple.
fonte
Para o PayPal, adicione esquemas de URL abaixo:
Consulte este link
fonte
Swift 3.1, Swift 3.2, Swift 4
Adicione-os no Info.plist:
fonte
Quando tentei ligar para o Facebook a partir do meu próprio aplicativo hoje, descobri que não havia uma
LSApplicationQueriesSchemes
chave que eu pudesse adicionar aoInfo.plist
(Xcode Versão 8.2.1 (8C1002)). Abri oInfo.plist
com Sublime Text e o adicionei manualmente ao arquivo, depois funcionou. Apenas para que você saiba que, se não conseguir encontrar a chave, basta adicioná-la.fonte