IOS SDK Arbeta med URL-scheman

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.

Steg 1: Skapa ett avsändarprojekt

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.

Steg 2: Konfigurera XIB- och Interface Builder-anslutningarna

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.

Steg 3: Öppna webbadresser för kommunikation

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.

Steg 4: Skapa en mottagare 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.

Steg 5: Registrera skräddarsydda webbadressscheman

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.

Steg 6: Hantera webbadressen

Ö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.

Steg 7: Testa applikationen

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.

Slutsats

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!

Ytterligare information och resurser

Fördelar:

  • Tvinga inte användaren att vara ansluten till ett nätverk eller kräva ytterligare resurser för hantering av webbservrar.
  • En enkel, snabb och enkel metod för att genomföra kommunikation.
  • Ge ett offentligt kommunikationsgränssnitt som någon app kan dra nytta av.
  • Öppna din ansökan från din webbplats med hjälp av en ankare. Ex: Öppna vår iPhone-applikation

Nackdelar:

  • Till skillnad från andra plattformar som Android skapar inte iPhone en stack av åtgärder (backstapling på Android). Vad det innebär är att om du bestämmer dig för att starta en annan applikation, kommer din ansökan inte att återupptas när användaren lämnar programmet du öppnade.

När du inte ska använda webbadressscheman:

  • Skickar användarkänslig data, t.ex. användarnamn och lösenordskombinationer. Du borde aldrig göra det här; hänvisa istället till nyckelring API.
  • Undvik att använda webbadressscheman när du kan implementera andra programfunktioner internt och direkt, för att undvika att din ansökan stängs. Om du till exempel använder ett webbadressschema för att starta programmet Kartor när du kan implementera Maps in-app? Beroende på situationen kan du behöva, men i många fall öppnar Maps in-app tillräckligt.
  • Ingen autentisering att de data du skickat kommer att nå rätt ansökan eller om det har uppnåtts, nämligen varför känsliga uppgifter inte ska skickas.

Medel:

  • Apple Developer Reference (tillhandahåller information om URL-scheman och hur du startar Apple-appar med dem)
  • IOS mobil app mallar på Envato Market