web-dev-qa-db-fra.com

iOS 9 n'ouvre pas l'application Instagram avec URL SCHEME

L'URL suivante s'ouvre sur iOS 8.3 et versions antérieures, mais cela ne fonctionne pas et iOS 9

let instagramURL = NSURL(string: "instagram://app")

Pourquoi l'URL ne s'ouvre-t-elle pas?

131
Sk.Azad

iOS 9 a légèrement modifié le traitement du schéma d'URL. Vous devez ajouter à la liste blanche les URL que votre application appellera à l'aide de la clé LSApplicationQueriesSchemes dans votre Info.plist

S'il vous plaît voir le message ici: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes

La conclusion principale est que:

Si vous appelez la méthode «canOpenURL» sur une URL qui ne figure pas dans votre liste blanche, la réponse sera «NON», même si une application installée a été enregistrée pour gérer ce schéma. Une entrée syslog «Cette application n'est pas autorisée à interroger le schéma xxx» apparaîtra.

Si vous appelez la méthode «openURL» sur une URL qui ne figure pas dans votre liste blanche, celle-ci échouera de manière silencieuse. Une entrée syslog «Cette application n'est pas autorisée à interroger le schéma xxx» apparaîtra.

L'auteur spécifie également qu'il s'agit d'un bogue avec le système d'exploitation et Apple corrigera ce problème dans une version ultérieure.

204
thelaws

Comme indiqué ci-dessus, vous souhaitez ajouter une clé dans la liste d'informations, voici la liste de la plupart des réseaux sociaux.

<key>LSApplicationQueriesSchemes</key>
    <array>
     <string>fb</string>
     <string>fbapi</string>
     <string>fbauth2</string>
     <string>fbshareextension</string>
     <string>fb-messenger-api</string>
     <string>Twitter</string>
     <string>viber</string>
     <string>whatsapp</string>
     <string>wechat</string>
     <string>line</string>
     <string>instagram</string>
     <string>kakaotalk</string>
     <string>mqq</string>
     <string>vk</string>
     <string>comgooglemaps</string>
     <string>googlephotos</string>
     <string>ha</string>
     <string>yammer</string>
    </array>

* Les 3 premiers matchs Facebook (FBSDK 4.6): fbapi, fbauth2, fbshareextension. "Ha" est pour Snapchat

146
Matthieu Rouif

Il s'agit d'une nouvelle fonctionnalité de sécurité pour iOS 9. Regardez WWDC 2015 Session 703 pour plus d'informations. 

Toute application créée avec le SDK 9 doit fournir une entrée LSApplicationQueriesSchemes dans son fichier plist, indiquant les modèles qu'elle tente d'interroger.

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>urlscheme</string>
 <string>urlscheme2</string>
 <string>urlscheme3</string>
 <string>urlscheme4</string>
</array> 
85
Leo Natan

En supposant que deux applications TestA et TestB. TestB veut demander si TestA est installé. "TestA" définit le schéma d'URL suivant dans son fichier info.plist:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>testA</string>
        </array>
    </dict>
</array>

La deuxième application "TestB" essaie de savoir si "TestA" est installé en appelant:

[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TestA://"]];

Mais cela renverra normalement NON dans iOS9 car "TestA" doit être ajouté à l'entrée LSApplicationQueriesSchemes dans le fichier info.plist de TestB. Ceci est fait en ajoutant le code suivant au fichier info.plist de TestB:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>TestA</string>
</array>

Une implémentation fonctionnelle peut être trouvée ici: https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example

24
Awsed

De la session 703 WWDC 2015:

Vous pouvez continuer à utiliser des modèles d'URL lorsque vous créez votre application pour iOS 9 et vous voulez appeler des schémas d'URL, vous devez maintenant les déclarer dans vos applications Info.plist. Il existe une nouvelle clé, LSApplicationQueriesSchemes, et ici vous aurez besoin d’ajouter la liste des schémas que vous voulez avoir canOpenURL sur.

 For instance, incase of FB

21
Kaey

Le partage Facebook à partir d'un dialogue de partage échoue même avec la réponse @Matthieu (qui est 100% correcte pour le reste des URL sociales). J'ai dû ajouter un ensemble d'URL que j'ai inversé à partir du SDK de Facebook.

<array>
        <string>fbapi</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
        <string>fb-messenger-api</string>
        <string>Twitter</string>
        <string>whatsapp</string>
        <string>wechat</string>
        <string>line</string>
        <string>instagram</string>
        <string>kakaotalk</string>
        <string>mqq</string>
        <string>vk</string>
        <string>comgooglemaps</string>
        <string>fbapi20130214</string>                                                    
        <string>fbapi20130410</string>                                                     
        <string>fbapi20130702</string>                                                    
        <string>fbapi20131010</string>                                                    
        <string>fbapi20131219</string>                                                    
        <string>fbapi20140410</string>                                                     
        <string>fbapi20140116</string>                                                     
        <string>fbapi20150313</string>                                                     
        <string>fbapi20150629</string>
    </array>
2
elbuild

Eh bien, vous pouvez ouvrir une application en appelant directement openURL: ou openURL:options:completionHandler: (iOS 10 à partir de maintenant) sans effectuer la vérification conditionnelle canOpenURL:. Veuillez lire la section discussion dans doc Apple pour canOpenURL: méthode qui indique:

la méthode openURL: n'est pas contrainte par l'exigence LSApplicationQueriesSchemes.

1
iphondroid

Il est important de noter qu'il y avait un bug avec les téléphones jailbreakés sur 9.0.x qui cassait les schémas d'URL. Si vous utilisez un appareil jailbreaké, assurez-vous de mettre à jour Patcyh dans Cydia. 

1
Buzzrick

Il ne semble pas que quiconque ait expliqué comment spécifier des URL avec des paramètres incorporés. Toute URL contenant des paramètres ne permet pas de spécifier l'URL spécifique dans LSApplicationsQueriesSchemes. Par exemple, supposons que j'ai une application de messagerie qui transmet l'adresse de messagerie de l'expéditeur:

myemail://[email protected]

La seule façon de le faire fonctionner dans iOS9 est de supprimer tous les paramètres.

0
Dave

Pour Paypal, ajoutez ci-dessous les schémas d'URL:

 enter image description here

Référer ce link

0
Naveen Kumar M

Swift 3.1, Swift 3.2, Swift 4

if let urlFromStr = URL(string: "instagram://app") {
    if UIApplication.shared.canOpenURL(urlFromStr) {
        if #available(iOS 10.0, *) {
            UIApplication.shared.open(urlFromStr, options: [:], completionHandler: nil)
        } else {
            UIApplication.shared.openURL(urlFromStr)
        }
    }
}

Ajoutez-les dans Info.plist:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>instagram</string>
</array>
0
Vini App

Dans Swift 4.2 et Xcode 10.1

CFBundleURLSchemes et LSApplicationQueriesSchemes pour gmail, fb, Twitter et liens associés.

<key>CFBundleURLTypes</key>
    <array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>li5****5</string>
            <string>com.googleusercontent.apps.8***************5f</string>
            <string>fb8***********3</string>
            <string>twitterkit-s***************w</string>
        </array>
    </dict>
</array>
<key>FacebookAppID</key>
<string>8*********3</string>
<key>FacebookDisplayName</key>
<string>K************ app</string>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fb-messenger-share-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>

    <string>Twitter</string>
    <string>twitterauth</string>

    <string>linkedin</string>
    <string>linkedin-sdk2</string>
    <string>linkedin-sdk</string>

</array>

Voir l'écran ci-dessous

 enter image description here

0
iOS

Apple a modifié la méthode canOpenURL sur iOS 9. Les applications qui recherchent des schémas d'URL sous iOS 9 et iOS 10 doivent déclarer ces schémas au fur et à mesure qu'ils sont soumis à Apple.

0
Nish