iOS SDK Arbeiten mit URL-Schemata

Die Kommunikation zwischen Apps bietet Ihrer Anwendung die Möglichkeit, die Funktionen anderer Anwendungen zu nutzen, Daten zwischen Apps zu senden und zu empfangen und eine umfassende Benutzererfahrung zu bieten, die "einfach funktioniert"..

In diesem Lernprogramm werden zwei Apps erstellt, eine App, die Daten sendet, und eine andere App, die diese Daten empfängt. Zusammen werden diese Apps URL-Schemata demonstrieren, eine Methode zum Senden und Empfangen von Daten zwischen Anwendungen. Dies ist ein ziemlich fortgeschrittenes Tutorial in Bezug auf das Verständnis von Xcode, und ich würde dringend empfehlen, dass Sie sich mit Xcode and Interface Builder wohlfühlen, bevor Sie dieses Tutorial beginnen.

Bitte beachten Sie: Zum Testen dieser App ist ein physisches Gerät erforderlich.

Schritt 1: Erstellen eines Absenderprojekts

Erstellen Sie ein neues Xcode-Projekt, und wählen Sie "View Based Application". Klicken Sie auf "Next". Geben Sie dem Projekt den Namen "Absender" und geben Sie Ihre Unternehmens-ID ein. Dieses Projekt wird die App beherbergen, die Informationen an die "Empfänger" -App sendet, die wir in Kürze erstellen werden.

Schritt 2: Richten Sie die XIB- und Interface Builder-Verbindungen ein

Bevor wir unsere XIB einrichten, erstellen wir vorab einige Deklarationen.

Öffnen Sie im linken Navigator-Fenster SenderViewController.h und richten Sie es wie folgt ein:

#einführen  @interface SenderViewController: UIViewController IBOutlet UITextField * textBox;  - (IBAction) openMaps: (ID) Absender; - (IBAction) openYoutube: (ID) -Sender; - (IBAction) openReceiverApp: (ID) Absender; @ property (nichtatomisch, beibehalten) IBOutlet UITextField * textBox; @Ende

Dadurch deklarieren wir einige Methoden, die in der Zukunft von UIButtons aufgerufen werden, und eine Variable, die auf ein UITextField verweist. Diese Elemente der Benutzeroberfläche werden als Nächstes hinzugefügt.

Öffnen Sie nun im linken Navigator-Fenster SenderViewController.xib und ziehen Sie ein UITextField und drei UIButtons aus dem rechten Utilities-Fensterbereich. Stapeln Sie sie vertikal in der Ansicht und benennen Sie die erste Schaltfläche in "Senden Sie Text an die Empfänger-App", die zweite Schaltfläche in "Karten öffnen" und die dritte Schaltfläche in "YouTube öffnen" ab. Ihre Ansicht sollte in etwa der Abbildung unten ähneln.

Unser letzter Schritt ist nun die Fertigstellung unserer IBConnections. Wählen Sie auf der linken Seite File Owner (orangefarbene Wireframe-Box) aus und wählen Sie dann im Bereich Utilities auf der rechten Seite die Registerkarte Connections Inspector (Pfeil). Verbinden Textfeld zum UITextField. Als nächstes verbinden openMaps:, openYoutube:, und openReceiverApp: zu ihrem jeweiligen Button? Touch Up Inside "-Ereignis durch eine Verbindungslinie vom rechten Kreis zu den Buttons. Die Verbindungen sollten dem unten gezeigten ähneln.

Schritt 3: URLs für die Kommunikation öffnen

Öffnen Sie zunächst die Datei SenderViewController.m im Navigator-Fenster. Unter @Implementierung Fügen Sie die folgende Zeile hinzu, um unser Eigentum zu synthetisieren:

@synthetize textBox;

Lassen Sie uns auch sicherstellen, dass wir die Regeln für die korrekte Speicherverwaltung einhalten und die oben in unserem Besitz befindlichen Vorräte bereinigen [Super Dealloc]; hinzufügen:

[textBox release];

Zuletzt in unserer viewDidUnload-Methode unten [super viewDidUnload]; "hinzufügen:

self.textBox = nil;

Ein kurzer Überblick über URL-Schemata besteht darin, dass URL-Schemas es Apps ermöglichen, ihr eigenes Protokoll zu registrieren, um die Datenübertragung zu ermöglichen. Einige gängige Beispiele für Protokolle, die Sie regelmäßig verwenden können, sind "http: //", "https: //" und "ftp: //". Beispielsweise kann eine Lesezeichen-App registriert werden. Bookmark: // ", damit andere Apps Links mithilfe des URL-Schemas bookmarken können, bookmark: //www.envato.com". Apps können sich nicht beim Protokoll "http: //" registrieren, obwohl einige Apple-Apps diese Regel nicht einhalten und registriert sind : // "um Apps wie Maps, iTunes und YouTube zu öffnen. Unsere Receiver-App wird sich für? readtext: // texthere" registrieren. Wir können diese URLs öffnen, indem Sie die Methode von UIApplication aufrufen Öffne URL:. Wenn wir verwenden Öffne URL: Es startet die angegebene App und übermittelt die von Ihnen angegebenen Daten.

Fügen Sie der SenderViewController.m-Datei die folgenden Methoden hinzu:

-(IBAction) openMaps: (id) sender // Öffnet eine Karte mit dem Envato-Hauptsitz UIApplication * ourApplication = [UIApplication sharedApplication]; NSString * ourPath = @ "http://maps.google.com/maps?ll=-37.812022,144.969277"; NSURL * ourURL = [NSURL URLWithString: ourPath]; [unsereAnwendung openURL: ourURL];  - (IBAction) openYoutube: (id) sender // Öffnet ein Video eines iPad 2 Commercial UIApplication * ourApplication = [UIApplication sharedApplication]; NSString * ourPath = @ "http://www.youtube.com/watch?v=TFFkK2SmPg4"; NSURL * ourURL = [NSURL URLWithString: ourPath]; [unsereAnwendung openURL: ourURL];  - (IBAction) openReceiverApp: (id) sender // Öffnet die Receiver-App, falls installiert, andernfalls wird ein Fehler angezeigt UIApplication * ourApplication = [UIApplication sharedApplication]; NSString * URLEncodedText = [self.textBox.text stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSString * ourPath = [@ "readtext: //" stringByAppendingString: URLEncodedText]; NSURL * ourURL = [NSURL URLWithString: ourPath]; if ([unsereAnwendung canOpenURL: ourURL]) [ourApplication openURL: unsereURL];  else // Anzeigefehler UIAlertView * alertView = [[UIAlertView-Zuordnung] initWithTitle: @ Meldung "Receiver Not Found": "Die Receiver-App ist nicht installiert. Sie muss zum Senden von Text installiert werden." Delegat: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; [alertView release]; 

Diese Methoden verwenden das Öffne URL Methode der UIApplication, um Daten an andere Apps zu senden. Apple hat die Google Maps-Anwendung und die YouTube-Anwendung im Wesentlichen mit? Http: // "registriert, also rufen wir einfach an Öffne URL auf diesen URLs. Um unsere URL zu erstellen, haben wir auch die stringByAddingPercentEscapesUsingEncoding: Methode, um sicherzustellen, dass die Zeichenfolge eine gültige URL ist, und zwar durch URL, die die Zeichenfolge codiert (wir werden sie in unserer Receiver-App decodieren). Für unsere benutzerdefinierte URL? Readtext: // "prüfen wir zunächst, ob der Link mit geöffnet werden kann canOpenURL. Dies prüft im Wesentlichen, ob die App installiert ist, die für dieses bestimmte URL-Schema registriert ist, und wenn dies der Fall ist, können wir die URL mit unserem Text öffnen. Wenn die App nicht installiert ist, wird eine Fehlermeldung angezeigt. Beachten Sie, dass das URL-Schema, von dem Ihre App abhängig ist, möglicherweise nicht funktioniert, wenn Sie Ihre App für die Öffentlichkeit freigeben, da die andere App nicht installiert ist. Sie sollten immer das durchführen canOpenURL beim Öffnen von Nicht-http: // URL-Schemata.

Fahren Sie fort und erstellen Sie die Anwendung, und führen Sie sie aus. Beachten Sie, dass die Buttons "Maps" und "YouTube" ihre jeweiligen Apps öffnen. Die Schaltfläche "Text senden" gibt außerdem eine Fehlermeldung zurück, da wir noch keine App "Empfänger" erstellt haben.

Schritt 4: Erstellen einer Empfänger-App

Erstellen Sie ein neues XCode-Projekt, und wählen Sie "View Based Application". Klicken Sie auf "Next". Geben Sie dem Projekt einen Namen. "Receiver", und geben Sie Ihre Unternehmens-ID ein. Dieses Projekt enthält die App, die die von der "Sender" -App gesendeten Informationen liest.

Schritt 5: Registrieren Sie das benutzerdefinierte URL-Schema

Erweitern Sie im Projektnavigator die Gruppe Unterstützende Dateien, und öffnen Sie die Receiver-Info.plist-Datei.

Sie können eine neue Zeile hinzufügen, indem Sie zum Menü gehen und auf klicken Editor> Element hinzufügen. Richten Sie ein URL-Typenelement ein, indem Sie ein neues Element hinzufügen. Erweitern Sie den Schlüssel URL-Typen, erweitern Sie Element 0, und fügen Sie ein neues Element hinzu, "URL-Schemata". Geben Sie "readtext" für "Element 0" von "URL-Schemata" und Ihre Firmen-ID für den "URL-Bezeichner" ein. Ihre Datei sollte dem Bild unten ähneln, wenn Sie fertig sind.

Schritt 6: Behandeln Sie die URL

Öffnen Sie ReceiverAppDelegate.m und ersetzen Sie die application: applicationDidFinishLaunchingWithOptions: Methode mit dem folgenden Code:

- Anwendung (BOOL): Anwendung (UIApplication *) didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Überschreibungspunkt für die Anpassung nach dem Start der Anwendung. self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; // Anzeigefehler ist keine URL wenn (! [LaunchOptions objectForKey: UIApplicationLaunchOptionsURLKey]) UIAlertView * alertView; alertView = [[UIAlertView-Zuordnung] initWithTitle: @ Fehlermeldung: @ "Diese App wurde ohne Text gestartet. Öffnen Sie diese App mit der Sender-App, um Text zu senden." Delegat: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; [alertView release];  JA zurückgeben; 

Dies gibt einen Fehler aus, wenn die Anwendung ohne URL geöffnet wird. Wenn dies der Fall ist, würden Sie normalerweise Ihre App normal laden, aber zum Experimentieren wird ein Fehler angezeigt.

Fügen Sie den folgenden Code unter dem hinzu application: applicationDidFinishLaunchingWithOptions: Methode.

- (BOOL) Anwendung: (UIApplication *) Anwendung handleOpenURL: (NSURL *) url // Text anzeigen UIAlertView * alertView; NSString * text = [[URL-Host] stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; alertView = [[UIAlertView-Zuordnung] initWithTitle: @ "Text" -Meldung: Textdelegat: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; [alertView release]; JA zurückgeben; 

Dieser Code benachrichtigt den Benutzer mit dem Text, der von der Sender-App gesendet wurde, wenn die Anwendung mit einer URL geöffnet wurde. Im Allgemeinen sollten Sie diese Daten verwenden, um eine entsprechende Aktion in Ihrer App zu verfolgen. Beachten Sie, dass wir den Hostnamen der URL verwendet haben, um unseren Text abzurufen. Wir haben dies getan, weil das von uns registrierte URL-Schema wie jede andere URL funktioniert: schema: //hostname/pfad/datei.php? Variable = x # section "(Erinnern Sie sich daran, dass unsere URL? Readtext: // text" war). Wir haben den Text auch mit dem URL-Code decodiert stringByReplacingPercentEscapesUsingEncoding: Methode wie zuvor hatten wir URL kodiert.

Schritt 7: Testen der Anwendung

Endlich ist es an der Zeit, diese beiden Anwendungen zu testen. Sie müssen beide auf einem physischen iOS-Gerät erstellt und installiert sein. Stellen Sie sicher, dass Sie das Gerät beim Testen vom Computer getrennt haben und die Receiver-App nach dem Trennen geschlossen haben, um Probleme zu vermeiden. Öffnen Sie die Sender-App, schreiben Sie Text ein und klicken Sie auf Senden. Die Empfänger-App sollte sich mit dem eingegebenen Text öffnen.

Fazit

Bei Erfolg sollten Sie nun die Kommunikation zwischen Apps über URL-Schemata problemlos implementieren können. Wenn Sie Fragen oder Kommentare haben, können Sie diese gerne in den Kommentaren hinterlassen. Danke fürs Lesen!

Zusätzliche Informationen und Ressourcen

Pros:

  • Erzwingt keine Verbindung des Benutzers mit einem Netzwerk oder erfordert zusätzliche Ressourcen für die Webserver-Verarbeitung.
  • Eine einfache, schnelle und einfache Methode zur Implementierung der Kommunikation.
  • Stellen Sie eine öffentliche Kommunikationsschnittstelle bereit, von der jede App profitieren kann.
  • Öffnen Sie Ihre Anwendung von Ihrer Website mit einem Ankertag. Ex: Öffnen Sie unsere iPhone-Anwendung

Nachteile:

  • Im Gegensatz zu anderen Plattformen wie Android erstellt das iPhone keinen Aktionsstapel (Backstacking auf Android). Dies bedeutet, dass Ihre Anwendung nicht fortgesetzt wird, wenn Sie sich entscheiden, eine andere Anwendung zu starten, wenn der Benutzer die geöffnete Anwendung beendet.

Wann sollten URL-Schemas nicht verwendet werden:

  • Senden von benutzersensitiven Daten wie Kombinationen aus Benutzername und Kennwort. Sie sollten dies niemals tun. verweisen Sie stattdessen auf die Schlüsselbund-API.
  • Vermeiden Sie die Verwendung von URL-Schemata, wenn Sie die Funktionen der anderen Anwendungen intern und direkt implementieren können, um ein Schließen der Anwendung zu vermeiden. Sollten Sie beispielsweise ein URL-Schema verwenden, um die Anwendung "Maps" zu starten, wenn Sie Maps in-app implementieren könnten? Je nach Situation müssen Sie dies tun, in vielen Fällen reicht es jedoch aus, Maps in-App zu öffnen.
  • Keine Authentifizierung, die die von Ihnen gesendeten Daten bei der richtigen Anwendung erreichen oder ob sie überhaupt erreicht wurde, nämlich warum sensible Daten nicht gesendet werden sollten.

Ressourcen:

  • Apple-Entwicklerhandbuch (enthält Informationen zu URL-Schemas und zum Starten von Apple-Apps mit diesen)
  • iOS Mobile App-Vorlagen auf Envato Market