Kommunikasjon mellom apper gir applikasjonen din en mulighet til å dra nytte av andre programmets funksjonalitet, sende og motta data mellom apper, og gi en rik brukeropplevelse som bare virker ".
I denne opplæringen skal vi lage to apper, en app som sender data og en annen app som mottar dataene. Sammen vil disse appene vise URL-ordninger, en metode for sending og mottak av data mellom applikasjoner. Dette er en ganske avansert opplæring med hensyn til forståelse av Xcode, og jeg vil sterkt anbefale at før du begynner denne opplæringen, føler du deg komfortabel med å bruke Xcode og Interface Builder.
Merk: En fysisk enhet er nødvendig for å teste denne appen.
La oss gå videre og opprette et nytt Xcode-prosjekt, velg? Vis basert applikasjon. "Hit next. Navn prosjektet" Sender "og skriv inn ditt firmaidentifikator. Dette prosjektet vil huse appen som sender informasjon til mottaker-appen som vi vil lage kort.
Før vi setter opp vår XIB, oppretter vi noen få erklæringer på forhånd.
I den venstre navigasjonsruten åpner du SenderViewController.h og konfigurerer den slik:
#importere@interface SenderViewController: UIViewController IBOutlet UITextField * textBox; - (IBAction) openMaps: (id) avsender; - (IBAction) openYoutube: (id) avsender; - (IBAction) openReceiverApp: (id) avsender; @property (nonatomic, behold) IBOutlet UITextField * textBox; @slutt
Ved å gjøre dette erklærer vi noen få metoder som vil bli kalt av UIButtons i fremtiden, og en variabel som refererer til et UITextField. Disse brukergrensesnittelementene blir lagt til neste.
Nå, i den venstre navigatørpanelet, åpner du SenderViewController.xib og drar ut en UITextField og tre UIButtons fra høyre side Utilities Panel. Stable dem vertikalt på visningen og endre navn på den første knappen til? Send tekst til mottakerapp ", den andre knappen til? Åpne kart" og den tredje knappen til? Åpne YouTube?. Visningen din bør likne noe som ligner bildet nedenfor.
Nå er vårt siste skritt å fullføre våre IBConnections. Velg filens eier (den oransje wireframe-boksen) til venstre, og velg deretter Tilkoblingsinspektøren (pilen) i verktøylinjen til høyre. Koble tekstboks
til UITextField. Deretter kobler du til openMaps:
, openYoutube:
, og openReceiverApp:
til deres respektive knappes "Touch Up Inside" -hendelse med en tilkoblingslinje fra sirkelen til høyre til knappene. Tilkoblingene skal likne det som er vist nedenfor.
For å begynne, åpne filen SenderViewController.m fra navigatørpanelet. Under @gjennomføring
legg til følgende linje for å syntetisere eiendommen vår:
@synthesize textbox;
La oss også sørge for at vi følger riktige regler for minnestyring og opprydding beholdningen vi hadde i eiendommen vår ovenfor [super dealloc];
Legg til:
[tekstboks utgivelse];
Til slutt, i vår viewDidUnload metode nedenfor? [Super viewDidUnload]; "add:
self.textBox = nil;
En kort gjennomgang av URL-ordninger er at nettadressesystemene tillater apper å registrere sin egen protokoll for å tillate overføring av data. Noen vanlige eksempler på protokoller du kan bruke regelmessig, er? Http: // ",? Https: //" og? Ftp: // ". For eksempel kan en bookmarking-app ønske å registrere? Bokmerke: // ", så andre apper kan bokmerke koblinger ved hjelp av URL-skjemaet," bokmerke: //www.envato.com ". Apper kan ikke registrere seg til? http: //" protokollen, selv om noen Apple-apper bryter denne regelen og er registrert? http : // "for å åpne opp apper som Maps, iTunes og YouTube. Vår mottaker-app vil registrere deg for? readtext: // texthere". Vi kan åpne disse nettadressene ved å ringe UIApplications metode openURL:
. Når vi bruker openURL:
den vil starte den angitte appen og gi den dataene du oppgav.
Legg til følgende metoder i SenderViewController.m-filen:
-(IBAction) openMaps: (id) avsender // Åpner et kart som inneholder Envato's Headquarters 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) avsender // Åpner en video av en iPad 2 Commercial UIApplication * ourApplication = [UIApplication sharedApplication]; NSString * ourPath = @ "http://www.youtube.com/watch?v=TFFkK2SmPg4"; NSURL * ourURL = [NSURL URLWithString: ourPath]; [ourApplication openURL: ourURL]; - (IBAction) openReceiverApp: (id) avsender // Åpner mottaker-appen hvis den er installert, ellers viser en feil UIApplication * ourApplication = [UIApplication sharedApplication]; NSString * URLEncodedText = [self.textBox.text stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSString * ourPath = [@ "readtext: //" stringByAppendingString: URLEncodedText]; NSURL * ourURL = [NSURL URLWithString: ourPath]; hvis (vår applikasjon kan OPENLUR: ourURL)) [ourApplication openURL: ourURL]; ellers // Visningsfeil UIAlertView * alertView = [[UIAlertView-tildeling] initWithTitle: @ "Mottaker ikke funnet" -melding: @ "Mottakerprogrammet er ikke installert. Det må være installert for å sende tekst." delegere: null avbrytButtonTitle: @ "OK" otherButtonTitles: null]; [alertView show]; [alertView release];
Disse metodene bruker openURL
Metode for UIApplication å sende data til andre apps. Apple har registrert kartprogrammet og YouTube-programmet med? Http: // "i hovedsak, så vi bare ringe openURL
på disse nettadressene. For å opprette nettadressen vår brukte vi også stringByAddingPercentEscapesUsingEncoding:
Metode for å sikre at strengen er en gyldig nettadresse med URL som koder for strengen (vi vil dekode den i mottaker-appen vår). For vår egendefinerte nettadresse? Lestekst: // "Vi kontrollerer først om linken kan åpnes med canOpenURL
. Dette kontrollerer i det vesentlige om appen som er registrert for den aktuelle nettadressesystemet, er installert, og hvis det er, kan vi åpne nettadressen med teksten vår. Hvis appen ikke er installert, viser vi en feilmelding. Husk at når du slipper appen din til offentligheten, kan nettadressesystemet din app er avhengig av, ikke fungere fordi den andre appen ikke er installert. Du bør alltid utføre canOpenURL
når du åpner ikke-http: // URL-ordninger.
Fortsett å bygge og kjøre programmet. Legg merke til at kartene og YouTube-knappene åpner sine respektive apper. Også knappen "Sendt tekst" returnerer en feilmelding siden vi ennå ikke har opprettet vår mottaker-app.
Opprett et nytt XCode-prosjekt, og velg? Vis basert applikasjon. "Hit neste. Navn prosjektet" Mottaker "og skriv inn ditt firmaidentifikator. Dette prosjektet vil huse appen som leser informasjon sendt av "Sender" app.
I Prosjektnavigatoren, utvid gruppen med støttende filer og åpne filen Receiver-Info.plist.
Du kan legge til en ny rad ved å gå til menyen og klikke Editor> Legg til element. Sett opp et URL-typer-element ved å legge til et nytt element. Utvid URL-typer-tasten, utvide element 0, og legg til et nytt element, «URL-ordninger». Fyll inn? Lese tekst for element 0 av? URL-ordninger »og ditt firmaidentifikator for URL-identifikatoren». Filen din skal ligne bildet nedenfor når du er ferdig.
Åpne ReceiverAppDelegate.m og erstatt applikasjons: applicationDidFinishLaunchingWithOptions:
metode med følgende kode:
- (BOOL) søknad: (UIApplication *) søknad didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Override punkt for tilpasning etter programstart. self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; // Visningsfeil er at det ikke er noen URL hvis (! [LaunchOptions objectForKey: UIApplicationLaunchOptionsURLKey]) UIAlertView * alertView; alertView = [[UIAlertView-tildeling] initWithTitle: @ "Feil" -melding: @ "Denne appen ble lansert uten tekst. Åpne denne appen med Sender-appen for å sende tekst." delegere: null avbrytButtonTitle: @ "OK" otherButtonTitles: null]; [alertView show]; [alertView release]; returnere JA;
Dette varsler en feil hvis søknaden åpnes uten en nettadresse. Vanligvis, hvis dette skjer, vil du laste appen din normalt, men for å eksperimentere vil vi vise en feil.
Legg til følgende kode under applikasjons: applicationDidFinishLaunchingWithOptions:
metode.
- (BOOL) søknad: (UIApplication *) søknadshåndtakOpenURL: (NSURL *) url // Displaytekst UIAlertView * alertView; NSString * text = [[url vert] stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; alertView = [[UIAlertView tildeling] initWithTitle: @ "Tekst" melding: tekstdelegate: null annullerButtonTitle: @ "OK" otherButtonTitles: null]; [alertView show]; [alertView release]; returnere JA;
Denne koden varsler brukeren med teksten som ble sendt av Sender-appen når søknaden ble åpnet med en nettadresse. Vanligvis bør du bruke disse dataene til å følge opp med en passende handling i appen din. Legg merke til at vi brukte vertsnavnet til nettadressen for å få vår tekst. Vi gjorde dette fordi nettadresseskjemaet vi registrerte fungerer som en annen URL-skjema: //hostname/path/file.php? Variable = x # section "(Husk at nettadressen vår var? Lese tekst: // tekst"). Vi avkodede også URL-teksten ved hjelp av stringByReplacingPercentEscapesUsingEncoding:
metode som tidligere vi hadde URL kodet det.
Tiden er endelig kommet for å teste disse to applikasjonene. De må både bygges og installeres på en fysisk iOS-enhet. Kontroller at du har koblet enheten fra datamaskinen når du har testet, og du har stengt mottaker-appen etter at du har koblet fra for å unngå problemer. Åpne Sender-appen, skriv litt tekst, og trykk send. Mottakeren app skal åpne og spørre deg med teksten du skrev inn.
Hvis det lykkes, bør du nå enkelt kunne implementere inter-app-kommunikasjon ved hjelp av URL-ordninger. Hvis du har spørsmål eller kommentarer, vær så snill å legge dem i kommentarfeltet nedenfor. Takk for at du leste!
Pros:
Åpne vår iPhone-applikasjon
Ulemper:
Når du ikke skal bruke nettadresseskjemaer:
ressurser: