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.
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.
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.
Ö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.
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.
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.
Ö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.
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.
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!
Pros:
Öffnen Sie unsere iPhone-Anwendung
Nachteile:
Wann sollten URL-Schemas nicht verwendet werden:
Ressourcen: