webentwicklung-frage-antwort-db.com.de

iOS 9 öffnet keine Instagram-App mit URL SCHEME

Die folgende URL wird unter iOS 8.3 und niedriger geöffnet, funktioniert jedoch unter iOS 9 nicht

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

Warum öffnet sich die URL nicht?

131
Sk.Azad

iOS 9 hat eine kleine Änderung im Umgang mit dem URL-Schema vorgenommen. Sie müssen die URLs auflisten, die Ihre App mit der LSApplicationQueriesSchemes-Taste in Ihrem Info.plist aufrufen soll. 

Siehe bitte hier: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes

Die wichtigste Schlussfolgerung lautet:

Wenn Sie die Methode "canOpenURL" für eine URL aufrufen, die sich nicht in Ihrer Whitelist befindet, wird "NO" zurückgegeben, auch wenn eine App installiert ist, die sich registriert hat, um dieses Schema zu verarbeiten. Ein Syslog-Eintrag „Diese App darf nicht nach Schema xxx abfragen“ wird angezeigt.

Wenn Sie die "openURL" -Methode für eine URL aufrufen, die sich nicht in Ihrer Whitelist befindet, schlägt diese automatisch fehl. Ein Syslog-Eintrag „Diese App darf nicht nach Schema xxx abfragen“ wird angezeigt.

Der Autor spekuliert auch, dass dies ein Fehler im Betriebssystem ist, und Apple wird dies in einer späteren Version beheben.

204
thelaws

Wie oben erwähnt, möchten Sie einen Schlüssel in die Info-Liste einfügen. Hier ist die Liste für die meisten sozialen Netzwerke

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

* Die ersten 3 Treffer Facebook (FBSDK 4.6): fbapi, fbauth2, fbshareextension. "Ha" ist für Snapchat

146
Matthieu Rouif

Dies ist eine neue Sicherheitsfunktion von iOS 9. Watch WWDC 2015 Session 703 für weitere Informationen. 

Jede mit SDK 9 erstellte App muss einen LSApplicationQueriesSchemes-Eintrag in ihrer plist-Datei bereitstellen, in dem angegeben wird, welche Schemata abgefragt werden sollen.

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

Angenommen, zwei Apps TestA und TestB. TestB möchte abfragen, ob TestA installiert ist. "TestA" definiert das folgende URL-Schema in seiner info.plist-Datei:

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

Die zweite App "TestB" versucht herauszufinden, ob "TestA" installiert ist.

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

Normalerweise wird dies jedoch in iOS9 NEIN zurückgegeben, da "TestA" zum Eintrag LSApplicationQueriesSchemes in der info.plist-Datei von TestB hinzugefügt werden muss. Dazu fügen Sie der info.plist-Datei von TestB den folgenden Code hinzu:

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

Eine funktionierende Implementierung finden Sie hier: https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example

24
Awsed

Von, Sitzung 703 WWDC 2015:

Sie können weiterhin URL-Schemata verwenden, wenn Sie Ihre App für iOS 9 erstellen Wenn Sie URL-Schemas aufrufen möchten, müssen Sie sie jetzt in .__ deklarieren. Ihre Apps Info.plist. Es gibt einen neuen Schlüssel, LSApplicationQueriesSchemes, und hier müssen Sie die Liste der gewünschten Schemata hinzufügen canOpenURL ein.

 For instance, incase of FB

21
Kaey

Das Teilen von Facebook über einen Freigabedialog schlägt auch bei der Antwort von @Matthieu fehl (die für den Rest der sozialen URLs zu 100% korrekt ist). Ich musste einen Satz URL hinzufügen, den ich von Facebook SDK stornierte.

<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

Nun, Sie können eine App öffnen, indem Sie openURL: oder openURL:options:completionHandler: (ab iOS 10) direkt ohne bedingte Prüfung canOpenURL:. Bitte lesen Sie den Diskussionsabschnitt in Apple-Dokument für canOpenURL: Methode , in dem es heißt:

die openURL: -Methode ist nicht durch die LSApplicationQueriesSchemes -Anforderung eingeschränkt.

1
iphondroid

Es ist wichtig anzumerken, dass auf 9.0.x ein Fehler mit jailbroken-Handys aufgetreten ist, durch den die URL-Schemata gebrochen wurden. Wenn Sie ein Gerät mit Jailbreak ausführen, müssen Sie den Patch in Cydia aktualisieren 

1
Buzzrick

Es scheint, als hätte niemand angesprochen, wie man URLs mit eingebetteten Parametern angibt. Bei einer URL, die Parameter enthält, kann die spezifische URL in LSApplicationsQueriesSchemes nicht angegeben werden. Angenommen, ich habe eine E-Mail-App, die die E-Mail-Adresse des Absenders weiterleitet:

myemail://[email protected]

Die einzige Möglichkeit, damit es unter iOS9 funktioniert, besteht darin, alle Parameter zu entfernen.

0
Dave

Für Paypal fügen Sie folgende URL-Schemata hinzu:

 enter image description here

Verweisen Sie auf diesen 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)
        }
    }
}

Fügen Sie diese in Info.plist hinzu:

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

In Swift 4.2 und Xcode 10.1

CFBundleURLSchemes und LSApplicationQueriesSchemes für Google Mail, fb, Twitter und verlinkt.

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

Siehe unterer Bildschirm

 enter image description here

0
iOS

Apple hat die canOpenURL-Methode unter iOS 9 geändert. Apps, die unter iOS 9 und iOS 10 nach URL-Schemas suchen, müssen diese Schemas angeben, wenn sie an Apple übermittelt werden.

0
Nish