Communicatie tussen apps biedt uw applicatie de mogelijkheid om te profiteren van de functionaliteit van andere applicaties, gegevens te verzenden en ontvangen tussen apps en een rijke gebruikerservaring te bieden die "gewoon werkt".
In deze zelfstudie gaan we twee apps maken, één app die gegevens verzendt en een andere app die die gegevens ontvangt. Samen zullen deze apps URL-schema's demonstreren, een methode voor het verzenden en ontvangen van gegevens tussen applicaties. Dit is een vrij geavanceerde zelfstudie met betrekking tot het begrijpen van Xcode, en ik zou het ten zeerste aanbevelen dat voordat u aan deze zelfstudie begint, u zich comfortabel voelt met Xcode en Interface Builder.
Let op: voor het testen van deze app is een fysiek apparaat vereist.
Laten we doorgaan en een nieuw Xcode-project maken, selecteer? View Based Application ". Klik hierna. Geef het project een naam" Afzender "en voer uw bedrijfsidentificatie in. Dit project biedt plaats aan de app die informatie verzendt naar de "Receiver" -app die we binnenkort zullen maken.
Voordat we onze XIB instellen, maken we van tevoren een paar declaraties.
In het linker navigatievenster opent u SenderViewController.h en stelt u het zo in:
#importeren@interface SenderViewController: UIViewController IBOutlet UITextField * textBox; - (IBAction) openMaps: (id) afzender; - (IBAction) openYoutube: (id) afzender; - (IBAction) openReceiverApp: (id) afzender; @property (nonatomic, retain) IBOutlet UITextField * textBox; @einde
Door dit te doen, verklaren we enkele methoden die door UIButtons in de toekomst zullen worden aangeroepen en een variabele die verwijst naar een UITextField. Deze gebruikersinterface-elementen worden vervolgens toegevoegd.
Nu, open in het navigatievenster links SenderViewController.xib en sleep één UITextField en drie UIButtons uit het rechterdeelvenster Hulpprogramma's. Stapel ze verticaal op de weergave en hernoem de eerste knop om? Tekst naar ontvangtoepassing verzenden ', de tweede knop om' Kaarten openen 'en de derde knop om? YouTube te openen.' Uw weergave moet lijken op de afbeelding hieronder.
Nu is onze laatste stap om onze IBConnections af te ronden. Selecteer de eigenaar van het bestand (het vakje met de oranje draadstructuur) aan de linkerkant en kies vervolgens in het paneel Hulpfuncties aan de rechterkant het tabblad Verbindingen inspecteur (de pijl). Aansluiten tekstvak
naar de UITextField. Maak vervolgens verbinding openMaps:
, openYoutube:
, en openReceiverApp:
naar hun respectieve knoppen? Touch Up Inside "evenement door een verbindingslijn van de cirkel aan de rechterkant naar de knoppen. De verbindingen moeten lijken op wat hieronder wordt getoond.
Open om te beginnen het bestand SenderViewController.m vanuit het navigatorvenster. Onder @implementatie
voeg de volgende regel toe om ons eigendom te synthetiseren:
@synthetize textBox;
Laten we er ook voor zorgen dat we de juiste regels voor geheugenbeheer volgen en het behoud opschonen dat we hadden in ons eigendom, hierboven [super dealloc];
toevoegen:
[release textBox];
Ten slotte, in onze viewDidUnload-methode hieronder? [Super viewDidUnload]; "add:
self.textBox = nihil;
Een korte samenvatting van URL-schema's is dat URL-schema's toestaan dat apps hun eigen protocol registreren om de overdracht van gegevens mogelijk te maken. Enkele veel voorkomende voorbeelden van protocollen die u regelmatig kunt gebruiken, zijn:? Http: // ",? Https: //" en? Ftp: // ". Een bookmarking-app wil bijvoorbeeld registreren? Bladwijzer: // ", zodat andere apps links kunnen bookmarken met behulp van het URL-schema,? bookmark: //www.envato.com". Apps kunnen zich niet registreren bij het? http: // "-protocol, hoewel sommige Apple-apps deze regel breken en zijn geregistreerd? http : // "om apps zoals Maps, iTunes en YouTube te openen. Onze Receiver-app registreert zich voor? readtext: // texthere". We kunnen deze URL's openen door de UIApplication-methode aan te roepen Open url:
. Wanneer we gebruiken Open url:
het start de opgegeven app en geeft deze de gegevens die u hebt opgegeven.
Voeg de volgende methoden toe aan uw SenderViewController.m-bestand:
-(IBAction) openMaps: (id) afzender // Opent een kaart met Enanium's hoofdkantoor UIApplication * ourApplication = [UIApplication sharedApplication]; NSString * ourPath = @ "http://maps.google.com/maps?ll=-37.812022,144.969277"; NSURL * ourURL = [NSURL URLWithString: ourPath]; [ourApplication openURL: ourURL]; - (IBAction) openYoutube: (id) afzender // Opent een video van een iPad 2 Commerciële UIApplicatie * ourApplication = [UIApplication sharedApplication]; NSString * ourPath = @ "http://www.youtube.com/watch?v=TFFkK2SmPg4"; NSURL * ourURL = [NSURL URLWithString: ourPath]; [ourApplication openURL: ourURL]; - (IBAction) openReceiverApp: (id) afzender // Opent de ontvanger-app indien geïnstalleerd, anders wordt een fout weergegeven UIApplication * ourApplication = [UIApplication sharedApplication]; NSString * URLEncodedText = [self.textBox.text stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSString * ourPath = [@ "readtext: //" stringByAppendingString: URLEncodedText]; NSURL * ourURL = [NSURL URLWithString: ourPath]; if ([ourApplication canOpenURL: ourURL]) [ourApplication openURL: ourURL]; else // Weergavefout UIAlertView * alertView = [[UIAlertView alloc] initWithTitle: @ Bericht "Receiver Not Found": @ "De Receiver-app is niet geïnstalleerd en moet worden geïnstalleerd om tekst te verzenden." delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; [alertView release];
Deze methoden gebruiken de Open url
methode van de UIA-toepassing om gegevens naar andere apps te verzenden. Apple heeft de Kaarten-applicatie en de YouTube-applicatie met? Http: // 'geregistreerd, dus we bellen gewoon Open url
op die URL's. Om onze URL te maken, hebben we ook het stringByAddingPercentEscapesUsingEncoding:
methode om ervoor te zorgen dat de tekenreeks een geldige URL is door de URL te coderen voor de tekenreeks (we zullen deze decoderen in onze ontvanger-app). Voor onze aangepaste URL? Readtext: // "controleren we eerst of de link geopend kan worden canOpenURL
. Dit controleert in essentie of de app die is geregistreerd voor dat specifieke URL-schema, is geïnstalleerd en als dit het geval is, kunnen we de URL openen met onze tekst. Als de app niet is geïnstalleerd, wordt een foutbericht weergegeven. Houd er rekening mee dat wanneer u uw app vrijgeeft voor het publiek, het URL-schema waarvan uw app afhankelijk is, mogelijk niet werkt omdat de andere app niet is geïnstalleerd. Je moet altijd het canOpenURL
bij het openen van niet-http: // URL-schema's.
Ga je gang en bouw en voer de applicatie uit. Let op de knoppen Kaarten en YouTube openen hun respectieve apps. De knop 'Verzonden tekst' retourneert ook een foutmelding omdat we de app 'Ontvanger' nog moeten maken.
Maak een nieuw XCode-project en selecteer? View Based Application ". Raak hierna, noem het project? Receiver" en voer uw bedrijfsidentificatie in. Dit project bevat de app die informatie leest die is verzonden door de app "Sender".
Vouw in de Projectnavigator de groep Ondersteunende bestanden uit en open het bestand Receiver-Info.plist.
U kunt een nieuwe rij toevoegen door naar het menu te gaan en op te klikken Editor> Item toevoegen. Stel een URL-type-item in door een nieuw item toe te voegen. Vouw de URL Types-toets uit, vouw Item 0 uit en voeg een nieuw item toe,? URL-schema's "Vul" leestekst in "voor Item 0 van? URL-schema's" en uw bedrijfs-ID voor de? URL-id ". Uw bestand zou op de onderstaande afbeelding moeten lijken als u klaar bent.
Open ReceiverAppDelegate.m en vervang de toepassing: applicationDidFinishLaunchingWithOptions:
methode met de volgende code:
- (BOOL) -toepassing: (UIApplication *) -toepassing didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Negeerpunt voor aanpassen na het starten van de toepassing. self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; // Displayfout is dat er geen URL is als (! [LaunchOptions objectForKey: UIApplicationLaunchOptionsURLKey]) UIAlertView * alertView; alertView = [[UIAlertView alloc] initWithTitle: @ "Fout" bericht: @ "Deze app is zonder tekst gestart. Open deze app met de Sender-app om tekst te verzenden." delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; [alertView release]; return YES;
Dit meldt een foutmelding als de toepassing zonder een URL wordt geopend. Over het algemeen, als dit gebeurt, zou u uw app normaal laden, maar omwille van het experimenteren zullen we een fout weergeven.
Voeg de volgende code toe onder de toepassing: applicationDidFinishLaunchingWithOptions:
methode.
- (BOOL) applicatie: (UIApplication *) application handleOpenURL: (NSURL *) url // Weergave tekst UIAlertView * alertView; NSString * text = [[url host] stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; alertView = [[UIAlertView alloc] initWithTitle: @ "Tekst" bericht: text delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; [alertView release]; terugkeer JA;
Deze code waarschuwt de gebruiker met de tekst die door de Sender-app is verzonden wanneer de toepassing wordt geopend met een URL. Over het algemeen moet u deze gegevens gebruiken om een passende actie in uw app uit te voeren. Merk op dat we de hostnaam van de URL hebben gebruikt om onze tekst te krijgen. We hebben dit gedaan omdat het URL-schema dat we hebben geregistreerd, functioneert zoals elke andere URL? Schema: //hostnaam/pad/bestand.php? Variabele = x # sectie "(herinner dat onze URL? Lees-tekst: // tekst" was). We hebben ook de URL gecodeerd met behulp van de stringByReplacingPercentEscapesUsingEncoding:
methode zoals eerder, we hadden een URL gecodeerd.
Het is eindelijk tijd om deze twee applicaties te testen. Ze moeten beide worden gebouwd en geïnstalleerd op een fysiek iOS-apparaat. Zorg ervoor dat je het apparaat tijdens het testen hebt losgekoppeld van de computer en dat je de ontvanger-app hebt gesloten na het loskoppelen om problemen te voorkomen. Open de Sender-app, schrijf wat tekst op en druk op verzenden. De ontvanger-app opent en vraagt u om de tekst die u hebt getypt.
Als dit lukt, zou u nu in staat moeten zijn om eenvoudig inter-app communicatie te implementeren met behulp van URL-schema's. Als u vragen of opmerkingen heeft, kunt u deze achterlaten in het gedeelte Opmerkingen hieronder. Bedankt voor het lezen!
Voors:
Open onze iPhone-applicatie
nadelen:
Wanneer gebruik je geen URL-schema's:
Middelen: