Comunicarea între aplicații oferă aplicației dvs. o oportunitate de a profita de funcționalitatea altei aplicații, de a trimite și de a primi date între aplicații și de a oferi o experiență bogată a utilizatorului care "funcționează".
În acest tutorial vom crea două aplicații, o aplicație care trimite date și o altă aplicație care primește aceste date. Împreună, aceste aplicații vor demonstra scheme de adrese URL, o metodă de trimitere și primire a datelor între aplicații. Acesta este un tutorial destul de avansat în ceea ce privește înțelegerea Xcode și aș recomanda ca înainte de a începe acest tutorial să vă simțiți confortabil folosind Xcode și Interface Builder.
Rețineți: pentru testarea acestei aplicații este necesar un dispozitiv fizic.
Să mergem mai departe și să creăm un nou proiect Xcode, selectați "Vizualizare bazată pe aplicație". Acest proiect va găzdui aplicația care trimite informații aplicației "Receiver" pe care o vom crea în scurt timp.
Înainte de a configura XIB-ul nostru, vom crea câteva declarații înainte.
În panoul Navigator din stânga, deschideți SenderViewController.h și configurați-l astfel:
#import@ interfață SenderViewController: UIViewController IBOutlet UITextField * textBox; - (IBAction) openMaps: (id) expeditor; - (IBAction) openYoutube: (id) expeditor; - (IBAction) openReceiverApp: (id) expeditor; @property (nonatomic, reține) IBOutlet UITextField * textBox; @Sfârșit
Procedând astfel, declarăm câteva metode care vor fi numite de UIButtons în viitor și o variabilă care face referință la un UITextField. Aceste Elemente UI vor fi adăugate în continuare.
Acum, în panoul Navigator din stânga, deschideți SenderViewController.xib și trageți un UITextField și trei UIButtons din panoul din partea dreaptă Utilities. Stabiliți-le vertical în vizualizare și redenumiți primul buton pentru a trimite mesajul "Aplicație receptor", al doilea buton pentru "Deschideți hărți" și al treilea buton pentru "Deschideți YouTube" .Vizualizarea dvs. ar trebui să semene cu ceva asemănător imaginii de mai jos.
Acum, ultimul nostru pas este de a finaliza IBConnections noastre. Selectați Proprietarul fișierului (caseta de portocaliu portocaliu) din stânga și apoi, în panoul Utilities din partea dreaptă, alegeți fila Connections Inspector (săgeata). Conectați casetă de text
la UITextField. Apoi, conectați-vă openMaps:
, openYoutube:
, și openReceiverApp:
la evenimentul "Touch Up Inside" al butonului respectiv, printr-o linie de conexiune din cercul din partea dreaptă a butoanelor. Conexiunile ar trebui să semene cu cele afișate mai jos.
Pentru a începe, deschideți fișierul SenderViewController.m din panoul Navigator. Sub @implementation
adăugați următoarea linie pentru a sintetiza proprietatea noastră:
@synthesize textBox;
De asemenea, asigurați-vă că respectăm regulile corecte de gestionare a memoriei și curățim reținerea pe care am avut-o în proprietatea noastră de mai sus [super dealloc];
adăuga:
[release textbox];
În cele din urmă, în metoda noastră de vizualizareDidUnload de mai jos? [Super viewDidUnload]; "adăugați:
self.textBox = zero;
O scurtă descriere a schemelor de adrese URL este că schemele de adrese URL permit aplicațiilor să își înregistreze propriul protocol pentru a permite transferul de date. Unele exemple obișnuite de protocoale pe care le puteți utiliza în mod regulat sunt ,? http: // ",? Https: //" și? Ftp: // "De exemplu, o aplicație de marcare poate doriți să vă înregistrați? ", astfel încât alte aplicații ar putea să marcheze linkuri utilizând schema URL," bookmark: //www.envato.com ". Aplicațiile nu se pot înregistra la protocolul" http: // ", deși unele aplicații Apple încalcă această regulă și sunt înregistrate? : // "pentru a deschide aplicații ca Maps, iTunes și YouTube. Aplicația Receptorul nostru se va înregistra pentru" readtext: // texthere ". Putem deschide aceste adrese URL apelând metoda UIApplication openURL:
. Când o folosim openURL:
acesta va lansa aplicația specificată și va transmite datele pe care le-ați furnizat.
Adăugați următoarele metode la fișierul SenderViewController.m:
-(IBAction) openMaps: (id) expeditor // deschide o hartă care conține UIAapplication al sediului Envato * ourApplication = [UIAapplication sharedApplication]; NSString * ourPath = @ "http://maps.google.com/maps?ll=-37.812022,144.969277"; NSURL * ourURL = [NSURL URLWithString: ourPath]; [aplicația noastră openURL: ourURL]; - (IBAction) openYoutube: (id) expeditor // Deschide un video al unei UIA aplicații comerciale iPad 2 * ourApplication = [UIApplication sharedApplication]; NSString * ourPath = @ "http://www.youtube.com/watch?v=TFFkK2SmPg4"; NSURL * ourURL = [NSURL URLWithString: ourPath]; [aplicația noastră openURL: ourURL]; - (IBAction) openReceiverApp: (id) expeditor // Deschide aplicația Receiver dacă este instalată, altfel afișează o eroare UIApplication * ourApplication = [UIAapplication sharedApplication]; NSString * URLEncodedText = [auto.textBox.text stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSString * ourPath = [@ "readtext: //" stringByAppendingString: URLEncodedText]; NSURL * ourURL = [NSURL URLWithString: ourPath]; dacă ([ourApplication canOpenURL: ourURL]) [Aplicația noastră openURL: ourURL]; altfel // Eroare de afișare UIAlertView * alertView = [UIAlertView alloc] initWithTitle: @ Mesajul "Receiver Not Found": @ "Aplicația Receiver nu este instalată. delegat: nil cancelButtonTitle: @ "OK" altButtonTitle: nil]; [alertView show]; [alertView release];
Aceste metode folosesc openURL
metoda de aplicare a UIA pentru a trimite date către alte aplicații. Apple a înregistrat aplicația Hărți și aplicația YouTube cu "http: //" în esență, așa că sunăm pur și simplu openURL
pe acele adrese URL. Pentru a ne crea adresa URL, am folosit și stringByAddingPercentEscapesUsingEncoding:
pentru a asigura că șirul este o adresă URL validă de codul URL care codifică șirul (îl vom decoda în aplicația Receptor). Pentru adresa URL personalizată? Readtext: // "verificăm mai întâi dacă se poate deschide linkul canOpenURL
. Acest lucru verifică, în esență, dacă aplicația care este înregistrată în respectiva schemă de adrese URL este instalată și dacă este, putem deschide adresa URL cu textul nostru. Dacă aplicația nu este instalată, afișăm un mesaj de eroare. Amintiți-vă că atunci când lansați aplicația către public, schema de adrese URL pe care este dependentă aplicația dvs. ar putea să nu funcționeze, deoarece cealaltă aplicație nu este instalată. Ar trebui să efectuați întotdeauna canOpenURL
când deschideți scheme non-http: // URL.
Continuați și construiți și rulați aplicația. Observați că butoanele Hărți și YouTube își deschid aplicațiile respective. De asemenea, butonul "Trimise text" returnează un mesaj de eroare, deoarece încă nu am creat aplicația "Receptor".
Creați un nou proiect XCode și selectați "Vizualizare bazată pe aplicație". Apăsați următorul nume pentru numele proiectului "Receiver" și introduceți identificatorul companiei. Acest proiect va găzdui aplicația care citește informații trimise de aplicația "Expeditor".
În Navigatorul de proiecte, extindeți grupul Fișiere suport și deschideți fișierul Receiver-Info.plist.
Puteți adăuga un rând nou accesând meniul și făcând clic Editor> Adăugați elementul. Configurați un element Tipuri de adrese URL adăugând un element nou. Extindeți cheia Adresă URL, extindeți elementul 0 și adăugați un nou element, "scheme de adrese URL". Completați "textul" pentru elementul 0 din "scheme de adrese URL" și identificatorul companiei dvs. pentru "Identificatorul URL". Fișierul dvs. ar trebui să semene cu imaginea de mai jos când ați terminat.
Deschideți ReceiverAppDelegate.m și înlocuiți aplicare: applicationDidFinishLaunchingWithOptions:
cu următorul cod:
- (BOOL): aplicație (UIApplication *) didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Punct de suprascriere pentru personalizare după lansarea aplicației. self.window.rootViewController = auto.viewController; [auto.window makeKeyAndVisible]; // Eroare de afișare nu există nici o adresă URL dacă (! [LaunchOptions objectForKey: UIApplicationLaunchOptionsURLKey]) UIAlertView * alertView; alertView = [[UIAlertView alloc] initWithTitle: @ Mesaj "Error": @ "Această aplicație a fost lansată fără text. Deschideți această aplicație utilizând aplicația Expeditor pentru a trimite text." delegat: nil cancelButtonTitle: @ "OK" altButtonTitle: nil]; [alertView show]; [alertView release]; reveniți DA;
Acest lucru anunță o eroare dacă aplicația este deschisă fără o adresă URL. În general, dacă se întâmplă acest lucru, vă încărcați în mod normal aplicația, dar din motive de experimentare vom afișa o eroare.
Adăugați următorul cod sub aplicare: applicationDidFinishLaunchingWithOptions:
metodă.
- (BOOL): aplicație (UIApplication *) handleOpenURL: (NSURL *) url // Afișare text UIAlertView * alertView; NSString * text = [[url gazdă] stringByReplacingPercentEscapesUtilizarea codului: NSUTF8StringEncoding]; alertView = [[UIAlertView alocare] initWithTitle: @ Mesaj "Text": delegat text: null cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; [alertView release]; reveniți DA;
Acest cod alertează utilizatorul cu textul trimis de aplicația Expeditor atunci când aplicația este deschisă cu o adresă URL. În general, ar trebui să utilizați aceste date pentru a urmări o acțiune adecvată în cadrul aplicației. Observați că am folosit numele de gazdă al adresei URL pentru a obține textul nostru. Am făcut acest lucru deoarece schema de adrese URL pe care am înregistrat-o funcționează ca orice altă adresă URL: schema: //hostname/path/file.php? Variable = x # section "(Amintiți-vă că adresa URL a fost" readtext: // text "). De asemenea, am decodificat textul folosind textul stringByReplacingPercentEscapesUsingEncoding:
deoarece am avut codul URL anterior.
A venit timpul să testați aceste două cereri. Acestea trebuie să fie construite și instalate pe un dispozitiv fizic iOS. Asigurați-vă că ați deconectat dispozitivul de la computer când testați și ați închis aplicația Receptor după deconectare pentru a preveni orice probleme. Deschideți aplicația Expeditor, scrieți un text și apăsați pe trimitere. Aplicația destinată receptorului ar trebui să se deschidă cu ajutorul textului pe care l-ați introdus.
Dacă reușiți, acum ar trebui să puteți implementa cu ușurință comunicații între aplicații utilizând scheme de adrese URL. Dacă aveți întrebări sau comentarii, nu ezitați să le lăsați în secțiunea de comentarii de mai jos. Vă mulțumim pentru lectură!
Pro:
Deschideți aplicația noastră iPhone
Contra:
Când nu utilizați scheme de adrese URL:
Resurse: