Kommunikation mellan appar ger din ansökan möjlighet att dra nytta av programmets funktionalitet, skicka och ta emot data mellan appar och ge en rik användarupplevelse som bara fungerar ".
I den här handledningen kommer vi att skapa två appar, en app som skickar data och en annan app som tar emot den data. Tillsammans kommer dessa appar att visa URL-system, en metod för att skicka och ta emot data mellan program. Detta är en ganska avancerad handledning när det gäller att förstå Xcode, och jag rekommenderar starkt att innan du börjar denna handledning känner du dig bekväm med att använda Xcode och Interface Builder.
Observera: En fysisk enhet krävs för att testa den här appen.
Låt oss fortsätta och skapa ett nytt Xcode-projekt, välj? Visa baserad applikation. "Hittad nästa. Namn på projektet" Sender "och ange ditt företagsidentifierare. Detta projekt kommer att hysa appen som skickar information till "Receiver" app som vi kommer att skapa inom kort.
Innan vi ställer in vår XIB, skapar vi några förklaringar i förväg.
Öppna den vänstra navigatörspanelen, öppna SenderViewController.h och sätt upp den så här:
#importera@interface SenderViewController: UIViewController IBOutlet UITextField * textBox; - (IBAction) openMaps: (id) avsändare; - (IBAction) openYoutube: (id) avsändare; - (IBAction) openReceiverApp: (id) avsändare; @property (nonatomic, behåll) IBOutlet UITextField * textBox; @slutet
Genom att göra detta förklarar vi några metoder som kommer att kallas av UIButtons i framtiden och en variabel som refererar till en UITextField. Dessa UI-element kommer att läggas till nästa.
Nu, i den vänstra navigationsrutan öppnar du SenderViewController.xib och dra ut en UITextField och tre UIButtons från den högra sidan Utilities Panel. Stack dem vertikalt på vyn och byt namn på den första knappen till "Skicka text till mottagare App", den andra knappen till "Öppna kartor" och den tredje knappen till "Öppna YouTube". Din vy ska likna något som liknar bilden nedan.
Nu är vårt sista steg att slutföra våra IBConnections. Välj filens ägare (den orange trådramen) till vänster och sedan i fönstret Verktyg till höger, välj fliken Connections Inspector (pilen). Ansluta textruta
till UITextField. Anslut sedan openMaps:
, openYoutube:
, och openReceiverApp:
till respektive knapps? Touch Up Inside "-händelse med en anslutningslinje från cirkeln till höger om knapparna. Anslutningarna ska likna vad som visas nedan.
Börja med att öppna filen SenderViewController.m från navigatörspanelen. Under @genomförande
lägg till följande rad för att syntetisera vår egendom:
@synthesize textbox;
Låt oss också se till att vi följer korrekta regler för minnehantering och städning av behållet som vi hade i vår egendom ovan [super dealloc];
Lägg till:
[textbox release];
Slutligen, i vår viewDidUnload-metod nedan? [Super viewDidUnload]; "lägg till:
self.textBox = nil;
En kort sammanfattning av URL-scheman är att URL-scheman tillåter att appar registrerar sitt eget protokoll för att tillåta överföring av data. Några vanliga exempel på protokoll som du kan använda regelbundet är,? Http: // ",? Https: //" och? Ftp: // ". Till exempel kan en bokmärkesapp registrera? Bokmärke: // ", så andra appar kan bokmärkeslänkar med URL-schemat," bokmärke: //www.envato.com ". Apps kan inte registreras till protokollet http: //, även om vissa Apple-appar bryter mot denna regel och är registrerade? http : // "för att öppna upp appar som Maps, iTunes och YouTube. Vår mottagare app registrerar för? readtext: // texthere". Vi kan öppna dessa webbadresser genom att ringa UIApplications metod openURL:
. När vi använder openURL:
den kommer att starta den angivna appen och lämna den data du angav.
Lägg till följande metoder i din SenderViewController.m-fil:
-(IBAction) openMaps: (id) avsändare // Öppnar en karta innehållande Envato: s huvudkontor UIApplication * ourApplication = [UIApplication sharedApplication]; NSString * ourPath = @ "http://maps.google.com/maps?ll=-37.812022,144.969277"; NSURL * ourURL = [NSURL URLWithString: ourPath]; [vårApplikation openURL: ourURL]; - (IBAction) openYoutube: (id) avsändare // Öppnar 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]; [vårApplikation openURL: ourURL]; - (IBAction) openReceiverApp: (id) avsändare // Öppnar mottagaren app om den är installerad, annars visar ett fel UIApplication * ourApplication = [UIApplication sharedApplication]; NSString * URLEncodedText = [self.textBox.text stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSString * ourPath = [@ "readtext: //" stringByAppendingString: URLEncodedText]; NSURL * ourURL = [NSURL URLWithString: ourPath]; om ([vårApplication kanOpenURL: ourURL]) [ourApplication openURL: ourURL]; else // Visningsfel UIAlertView * alertView = [[UIAlertView-tilldelning] initWithTitle: @ "Mottagare ej hittat" meddelande: @ "Mottagarprogrammet är inte installerat. Det måste vara installerat för att skicka text." delegera: noll cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; [alertView release];
Dessa metoder använder openURL
Metoden för UIAPlication att skicka data till andra appar. Apple har registrerat kartapplikationen och YouTube-programmet med? Http: // "i huvudsak så vi ringer bara openURL
på dessa webbadresser. För att skapa vår URL, använde vi också stringByAddingPercentEscapesUsingEncoding:
Metod för att säkerställa att strängen är en giltig URL med URL som kodar strängen (vi kommer att avkoda den i vår mottagare-app). För vår anpassade URL? Readtext: // "Vi kontrollerar först om länken kan öppnas med canOpenURL
. Detta kontrollerar i huvudsak om appen som är registrerad för det specifika webbadressschemat är installerat, och om det är kan vi öppna webbadressen med vår text. Om appen inte är installerad visas ett felmeddelande. Kom ihåg att när du släpper appen till allmänheten kanske det webbadressschema som din app är beroende av kanske inte fungerar eftersom den andra appen inte är installerad. Du bör alltid utföra canOpenURL
när du öppnar icke-http: // webbadresser.
Fortsätt bygg och kör programmet. Lägg märke till att kartor och YouTube-knappar öppnar sina respektive appar. Knappen "Skickad text" returnerar också ett felmeddelande eftersom vi ännu inte har skapat vår "Receiver" -app.
Skapa ett nytt XCode-projekt och välj? Visa baserad applikation. "Hittad nästa. Namn på projektet? Mottagare" och ange ditt företagsidentifierare. Detta projekt kommer att hysa appen som läser information skickad av "Sender" app.
I Project Navigator, expandera gruppen Supporting Files och öppna filen Receiver-Info.plist.
Du kan lägga till en ny rad genom att gå till menyn och klicka på Redaktör> Lägg till artikel. Ställ in ett URL-objekt genom att lägga till ett nytt objekt. Expand URL-typerna, expandera objekt 0 och lägg till ett nytt objekt,? URL-system ". Fyll i? Lästext" för punkt 0 av? URL-ordningar "och ditt företagsidentifierare för" URL-identifieraren ". Din fil ska likna bilden nedan när du är klar.
Öppna ReceiverAppDelegate.m och ersätt applikations: applicationDidFinishLaunchingWithOptions:
metod med följande kod:
- (BOOL) ansökan: (UIApplication *) ansökan didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Åsidosätt punkt för anpassning efter programstart. self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; // Visningsfel är att det inte finns någon URL om (! [LaunchOptions objectForKey: UIApplicationLaunchOptionsURLKey]) UIAlertView * alertView; alertView = [[UIAlertView-tilldelning] initWithTitle: @ "Error" -meddelandet: @ "Den här appen lanserades utan text. Öppna den här appen med avsändarappen för att skicka text." delegera: noll cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; [alertView release]; returnera JA;
Detta varnar ett fel om programmet öppnas utan en URL. Om det här inträffar skulle du normalt ladda din app normalt men för att experimentera kommer vi att visa ett fel.
Lägg till följande kod under applikations: applicationDidFinishLaunchingWithOptions:
metod.
- (BOOL) ansökan: (UIApplication *) applikationshandtagOpenURL: (NSURL *) url // Displaytext UIAlertView * alertView; NSString * text = [[url värd] stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; alertView = [[UIAlertView-tilldelning] initWithTitle: @ "Text" -meddelande: textdelegat: noll cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; [alertView release]; returnera JA;
Den här koden varnar användaren med texten som skickades av avsändarappen när programmet öppnas med en webbadress. Vanligtvis bör du använda dessa data för att följa upp en lämplig åtgärd inom din app. Observera att vi använde webbadressens värdnamn för att få vår text. Det gjorde vi eftersom URL-schemat vi registrerade fungerar som vilket annat URL-schema: //hostname/path/file.php? Variable = x # section "(Kom ihåg att vår webbadress var? Lästext: // text"). Vi avkodade även URL-adressen med texten stringByReplacingPercentEscapesUsingEncoding:
metod som tidigare hade vi URL-kodade det.
Tiden har äntligen kommit för att testa dessa två applikationer. De måste både byggas och installeras på en fysisk iOS-enhet. Se till att du har kopplat bort enheten från datorn när du testar och du har stängt mottagaren-appen efter att du kopplat loss för att förhindra några problem. Öppna Sender-appen, skriv upp lite text och tryck på Skicka. Mottagarappen ska öppnas och du får den text du skrev in.
Om du lyckas, ska du nu enkelt kunna implementera inter-app-kommunikation med URL-scheman. Om du har några frågor eller kommentarer, vänligen lämna dem i kommentarfältet nedan. Tack för att du läser!
Fördelar:
Öppna vår iPhone-applikation
Nackdelar:
När du inte ska använda webbadressscheman:
Medel: