Datenschutz- und URL-Schemata in iOS 9

Ab iOS 9 können Drittanbieteranwendungen nicht mehr beliebige URL-Schemas abfragen. Mehrere Drittanbieteranwendungen, vor allem Twitter, missbrauchten die canOpenURL (_ :) Methode der UIApplication Klasse, um zu verfolgen, welche Anwendungen auf einem bestimmten Gerät installiert sind.

Apple hat eine Reihe von Einschränkungen erlassen, um die Privatsphäre seiner Kunden zu schützen. In diesem kurzen Tipp erkläre ich Ihnen, was Sie zu diesen Änderungen wissen müssen, und ich zeige Ihnen, wie Sie Ihre Anwendungen aktualisieren können.

1. URL-Schemas abfragen

Ich gehe davon aus, dass Sie bereits wissen, dass eine iOS-Anwendung das Betriebssystem auffordern kann, eine andere Anwendung mit einem URL-Schema zu starten. In seiner einfachsten Form funktioniert es so etwas.

let URLAsString = "tweetbot: // _ bartjacobs / timeline" wenn URL = NSURL.init (Zeichenfolge: URLAsString) UIApplication.sharedApplication (). openURL (URL)

Manchmal ist es hilfreich, zuerst das Betriebssystem zu fragen, ob eine URL geöffnet werden kann, bevor diese geöffnet wird. Dies ist besonders nützlich, wenn Sie die Benutzeroberfläche aktualisieren möchten, je nachdem, welche Anwendungen der Benutzer installiert hat und mit der Ihre Anwendung interagieren kann. Im obigen Beispiel, Öffne URL(_:) schlägt fehl, wenn Tweetbot nicht auf dem Gerät des Benutzers installiert ist. Um das Betriebssystem zu fragen, ob eine URL geöffnet werden kann, können Sie das verwenden canOpenURL (_ :) Methode der UIApplication Klasse.

let URLAsString = "tweetbot: // _ bartjacobs / timeline" wenn URL = NSURL.init (Zeichenfolge: URLAsString) wenn UIApplication.sharedApplication (). canOpenURL (URL) UIApplication.sharedApplication (). print ("URL kann nicht geöffnet werden")

Leider wurden einige Anwendungen, vor allem Twitter, missbraucht canOpenURL (_ :) um festzustellen, welche Anwendungen auf dem Gerät des Benutzers installiert sind. Laut Apple verletzt dies die Privatsphäre des Benutzers. Daher toleriert Apple diese Art von Missbrauch in iOS 9 nicht mehr, indem es zwei Einschränkungen auferlegt.

  • Anwendungen, die mit dem iOS 9-SDK erstellt wurden, müssen die URL-Schemata, die sie abfragen möchten, auf die Whitelist setzen. Mit anderen Worten, ein Anruf an canOpenURL (_ :) schlägt fehl, wenn die URL nicht zu einer Whitelist in der Anwendung hinzugefügt wird Info.plist.
  • Anwendungen, die nicht mit dem iOS 9-SDK erstellt wurden, funktionieren weiterhin wie erwartet. Es gibt jedoch eine Einschränkung. Eine Anwendung kann nur 50 verschiedene URL-Schemas abfragen. Nachfolgende Anforderungen werden zurückgegeben falsch und einen Fehler werfen. In der Dokumentation wird betont, dass diese Einschränkung zurückgesetzt wird, wenn der Benutzer die Anwendung neu installiert oder aktualisiert.

2. Projekteinrichtung

Lassen Sie mich Ihnen zeigen, was dies in der Praxis bedeutet, indem Sie eine einfache Anwendung erstellen, die Tweetbot, meinen bevorzugten Twitter-Client, öffnet. Erstellen Sie ein neues Projekt in Xcode 7 und wählen Sie die Option Einzelansicht-Anwendung Vorlage. Nennen Sie das Projekt Schemata und setzen Sprache zu Schnell.

Bevor wir einen Blick auf URL-Schemata werfen, möchte ich die Benutzeroberfläche einrichten. Öffnen ViewController.swift und fügen Sie eine Aktion hinzu, openTweetbot (_ :), zum ViewController Klasse. Sie können die Implementierung vorerst leer lassen.

// MARK: - Actions @IBAction func openTweetbot (Sender: AnyObject) 

Öffnen Hauptplatine und fügen Sie einen Button hinzu Controller-Szene anzeigen. Stellen Sie den Titel der Schaltfläche auf Tweetbot öffnen und verbinden Sie den Button mit dem View Controller openTweetbot (_ :) Aktion, die wir zuvor erstellt haben.

Wir werden nichts zu kompliziert machen. Wenn ich auf das klopfe Tweetbot öffnen Wenn Sie auf die Schaltfläche klicken, öffnet das Betriebssystem Tweetbot und zeigt mir meine Zeitleiste an. Weitere Informationen zu den URL-Schemas für Tweetbot finden Sie auf der Tapbots-Website.

3. Vor iOS 9

Bevor Apple die oben genannten Einschränkungen für das Abfragen von URL-Schemas auferlegt hat, können Sie Folgendes tun:

@IBAction func openTweetbot (Sender: AnyObject) let application = UIApplication.sharedApplication () let URLAsString = "tweetbot: // _ bartjacobs / timeline" guard URL = NSURL.init (string: URLAsString) else return guard application.canOpenURL (URL) else return // URL öffnen application.openURL (URL)

Wir fragen das Betriebssystem, ob es die URL öffnen kann, an die wir übergeben werden canOpenURL (_ :). Wenn diese Methode zurückgegeben wird falsch Unter iOS 8 und niedriger wissen wir, dass die Anwendung, die uns interessiert, nicht auf dem Gerät des Benutzers installiert ist, vorausgesetzt das URL-Schema bezieht sich auf eine andere Anwendung. Dies kann sehr nützlich sein, aber Apple möchte der API einige Einschränkungen auferlegen, um Missbrauch zu vermeiden.

4. iOS 9

Wenn Sie die Anwendung in Xcode 7 erstellen, tippen Sie auf Tweetbot öffnen Taste, canOpenURL (_ :) kehrt zurück falsch und das Betriebssystem gibt einen Fehler aus, der ungefähr wie folgt aussieht:

Schemen [9227: 3539016] -canOpenURL: Fehler bei URL: "Tweetbot: // _ Bartjacobs / Timeline" - Fehler: "Diese App darf nicht nach dem Schema Tweetbot abfragen."

Das Betriebssystem weist uns ausdrücklich darauf hin, dass die Anwendung dies nicht erlaubt kennt ob es die URL öffnen kann, an die wir weitergeben canOpenURL (_ :). Das bedeutet nicht, dass die Anwendung die URL, zu der wir weitergeleitet wurden, nicht öffnen darf Öffne URL(_:), obwohl.

Wenn Sie die Implementierung von aktualisieren openTweetbot (_ :) Wie unten gezeigt und Sie Tweetbot installiert haben, kann die Anwendung Tweetbot öffnen, wenn Sie auf die Schaltfläche tippen. Dies unterstreicht, dass Apple die (falsche) Verwendung von begrenzen möchte canOpenURL (_ :), nicht Öffne URL(_:).

@IBAction func openTweetbot (Sender: AnyObject) let application = UIApplication.sharedApplication () let URLAsString = "tweetbot: // _ bartjacobs / timeline" guard URL = NSURL.init (Zeichenfolge: URLAsString) else return // Öffne URL application.openURL (URL)

5. Whitelisting-URL-Schemata

Glücklicherweise gibt es eine einfache Lösung für dieses Problem. Ab iOS 9 fordert Apple die Entwickler auf, die URL-Schemata, die eine Anwendung abfragen möchte, in die Whitelist aufzunehmen. Dies ist so einfach wie das Hinzufügen eines Eintrags zur Anwendung Info.plist.

Öffnen Info.plist, Einen Schlüssel mit dem Namen hinzufügen LSAnwendungQueriesSchemes, und setzen Sie den Wertetyp auf Array. Fügen Sie einen Artikel des Typs hinzu String zu dem Array und setzen Sie seinen Wert auf Tweetbot.

Wenn wir zurückkehren openTweetbot (_ :) Wir sind in der Lage, auf die ursprüngliche Implementierung hinzuweisen canOpenURL (_ :) ohne dass das Betriebssystem Fehler an uns wirft. Sie können Ihrer Anwendung so viele URL-Schemas hinzufügen Info.plist.

@IBAction func openTweetbot (Sender: AnyObject) let application = UIApplication.sharedApplication () let URLAsString = "tweetbot: // _ bartjacobs / timeline" guard URL = NSURL.init (string: URLAsString) else return guard application.canOpenURL (URL) else return // URL öffnen application.openURL (URL)

Fazit

Die meisten Anwendungen haben mit der neuen Richtlinie von Apple kein Problem. Es ist klar, dass Apple die Privatsphäre seiner Kunden schützen möchte, indem die Informationen eingeschränkt werden, die Anwendungen aus dem Betriebssystem extrahieren können. Anwendungen werden auf iOS unter Sandkasten gestellt, und Apple möchte steuern, wie viele Informationen eine Anwendung aus der Umgebung extrahieren kann, in der sich die Sandbox befindet.

Das Whitelisting von URL-Schemata ist für die meisten Anwendungen kein Problem, aber es kann langweilig werden, wenn Sie ein Anwendungs-Startprogramm wie Launch Center Pro erstellen möchten. Es ist immer noch möglich, einen Launcher zu erstellen, solange Sie jedes URL-Schema, das die Anwendung abfragen möchte, in die Positivliste aufnehmen. Dies kann jedoch ziemlich langweilig sein.