Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. iOS SDK
Code

SiriKit kiegészítők készítése iOS 10-ben

by
Difficulty:IntermediateLength:MediumLanguages:

Hungarian (Magyar) translation by Andras Czegledi (you can also view the original English article)

Final product image
What You'll Be Creating

Bevezetés

Mióta a Sirit 2011-ben bemutatták, az iOS fejlesztők azóta kérik hogy integrálhassák külső féltől származó appokkal is. A WWDC 2016 alkalmával bemutatott iOS 10-ben az Apple végre megnyitotta a SiriKit-et a fejlesztők előtt is. Habár még mindig vannak bizonyos megkötések arra vonatkozóan hogy milyen applikációk használhatják a Sirit, de már ez is egy lépés a megfelelő irányba. Lássuk mire használhatjuk a Sirit.

Ha többet szeretnél tudni a SiriKit-ről és a fejlesztől számára elérhető új funkciókról az iOS 10-ben, olvasd el Markus Mühlberger kurzusát, itt az Envato Tuts+-on.

Támogatott típusok

Ahhoz hogy a SiriKit-et használhasd, az appodnak az alábbi kategóriák valamelyikébe kell tartoznia:

  • VoIP hívás (pl Skype)
  • Üzenetküldés (WhatsApp)
  • Fizetés (Square, PayPal)
  • Fotózás (Photos)
  • Edzés (Runtastic)
  • Taxiszolgáltatás (Uber, Lyft)
  • CarPlay (kizárólag autógyárak számára)
  • Étteremfoglalás (Apple támogatás szükséges)

Ha az appod ezen kategóriák egyikébe sem tartozik, akkor sajnos jelenleg nem használhatod Sirit az appodban. De ne csüggedj, mert a SiriKit nagyon hasznos, és a jövőben kiterjeszthetik a szolgáltatási körét!

Kiegészítők architektúrája

Egy SiriKit kiegészítő valójában két különböző típusú kiegészítőből áll. Az első egy Intents kiegészítő, ami a felhasználótól érkező kérésekkel foglalkozik és egy specifikus feladatot lát el az appon belül (például hívásindítás, üzenetküldés, stb.).

Ezzel szemben viszont az IntentsUI kiegészítő használata nem kötelező. Csak akkor hozz létre ilyet hogyha testreszabnád a user interface-t amit Siri mutat amikor az általad kért adatokat mutatja meg. Ha nem hozol létre ilyet, a standard Siri interface fog megjelenni. Ebben a tutorialban mindkét kiegészítőfajtát bemutatom.

A 2016-os WWDC alatt az Apple kiadott két nagyon érdekes videót a SiriKit-ről. Ha meg szeretnéd nézni őket:

Példaprojekt

Készítsünk egy egyszerű applikációt ami fizetéseket dolgoz fel Sirivel. A célunk az hogy feldolgozzuk a "Küldj 20 dollárt Patrick-nak a TutsplusPayments-el" mondatot. A mondat tartalmazza a pénzösszeget és a pénznemet, a címzett nevét és a tranzakcióhoz szükséges appot. A későbbiekben jobban kielemezzük a fizetési szándékot.

Kezdeti beállítások

Kezdésként hozzunk létre egy standard Xcode projektet Swiftben és adjunk neki egy nevet. Van néhány kötelező dolog amit mindenképpen el kell végezned mielőtt bármi olyan kódot írnál, ami Siri API-jait használja.

1. A Target > Capabilities fülön kapcsold be a Sirit. Ne felejtsd el hozzáadni az entitlement-eket a projektstruktúrához.

Xcode project capabilities view

Nyisd meg az app Info.plist fájlját és add hozzá az NSSiriUsageDescription kulcsot. Ennek az értéke egy string, ami egy olyan szöveget tartalmaz, ami leírja a felhasználónak hogy miért kérünk hozzáférést a Sirihez.

Kattints a File > New > Target-re. A megjelenő ablakban az Application Extensions alatt válasszuk ki az Intents Extension-t. Válasszuk ki az UI Extension-t is. Ezzel a későbbiekben nem kell egy külön kiegészítőt létrehoznunk.

New Intents extension target

Az Info.plist fájlban az Intents target-ben nyisd ki teljesen az NSExtension dictionary-t és tanulmányozd át a tartalmát. A dictionary részletesen leírja hogy a kiegészítő melyik intent-eket támogatja és hogy a felhasználó meghívhatja-e ezeket az intenteket miközben a telefon zárolva van.

Add hozzá a legrelevánsabb intent-eket hogyha többet is támogatni szeretnél. A Siri ezt a sorrendet veszi figyelembe ha nem tudja eldönteni hogy a felhasználó pontosan melyiket szeretné használni.

Most definiálnunk kell hogy melyik intent-eket akarjuk támogatni. Ebben a példában egy olyan kiegészítőt fogunk készíteni ami a fizetési intent-et támogatja. Módosítsd az Info.plist fájlt az alábbi kép szerint.

Intents Info plist file

Itt megadjuk hogy az INSendPaymentIntent-et akarjuk kezelni és a telefonnak feloldva kell lennie. Nem akarjuk hogy idegenek küldjenek pénzt hogyha a telefont elvesztik vagy ellopják!

iOS Target

A következő lépésben kódot kell írnunk az iOS alkalmazásunkhoz. Engedélyt kell kérnünk a felhasználótól hogy a hangját továbbítsuk az Apple-nek analizálásra. Egyszerűen csak importálnunk kell az Intents framework-öt és meghívni a megfelelő metódusokat:

A dialógusablak ami az első indításnál fogadja majd a felhasználót így néz ki.

Alert that asks permission to access Siri

Mindössze ennyit kell tennünk az iOS applikációnkban. Most pedig lépjünk be a kiegészítők világába!

Intents kiegészítő

Váltsunk át a korábban létrehozott Intents kiegészítőre. Nyisd ki a tartalmát az Xcode projektnavigátor ablakban. Csak egy fájlt fogsz itt látni, aminek a neve IntentHandler.swift.

Ez a fájl a kiegészítő belépési pontja és ez kezel minden intent-et amit Siri küld. Siri minden intent-et a handler(for:) metódusba fog továbbítani ha a kiegészítőd több intentet is támogat. A te feladatod leellenőrizni az INIntent objektum típusát és annak megfelelően lekezelni.

Az IntentHandler.swift sablon alapból tartalmaz egy példaimplementációt az Üzenetküldés intent-re. Írd felül a kódot az alábbi üres metódussal hogy együtt haladhassunk a lépéseken.

Minden intent-nek van egy protokollja hogy az osztály minden szükséges metódusa implementálva legyen. Az Intents framework-ben a legtöbb protokollnak megegyezik a struktúrája.

Az általunk implementált protokoll neve INSendPaymentIntentHandling. Ebben a protokollban a következő kötelező és opcionális metódusok vannak:

  • Kötelező:handle(sendPayment:completion:)
  • Opcionális:confirm(sendPayment:completion:)
    resolvePayee(forSendPayment:with:)
    resolveCurrencyAmount(forSendPayment:with:)
    resolveNote(forSendPayment:with:)

Készítsünk egy kiegészítőt az IntentHandler osztályhoz ugyanabban a Swift fájlban, amiben csak az egyetlen kötelező metódust implementáljuk.

Ez egy nagyon egyszerű implementáció. Megbizonysodunk róla hogy van egy címzett (payee) és egy pénzösszeg (currencyAmount) hogy a tranzakciót sikeresnek jelölhessük. Talán nem is hiszed, de már működik is! Válaszd ki az Intents scheme-et Xcode-ban és futtasd le. Amikor az Xcode megnyitja a menüt hogy válassz egy appot a futtatáshoz, válaszd a Sirit.

Run the extension in Xcodes menu

Amikor Siri elindul mondd ki azt hogy "Küldj 20 dollárt Patrick-nak a TutsplusPayments-el (Send $20 to Patrick via TutsplusPayments)". Sikeresen elvégezted az első fizetést a hangoddal!

First successful payment via Siri

Teszteljünk arra az esetre is ha hibát kapunk. Mondd ki ugyanazt a mondatot, de ne adj meg címzettet (pl. "Küldj 20 dollárt a TutsplusPayments-el (Send $20 via TutsplusPayments)". Látni fogod hogy Siri elbukik és kitesz egy gombot hogy a fizetést az appon belül folytasd.

Payment failed due to missing payee name

Abban az esetben ha Siri nem ismerné fel amit mondunk, vagy nem kapja meg az egyik opcionális paramétert de nekünk ennek ellenére is szükségünk van egy értékre, implementáljuk az egyik feloldó (resolve) metódust. Ezekkel a metódusokkal megkérjük a felhasználót hogy adjon meg több adatot a fizetésről, például a címzett nevét, a pontos pénzösszeget, vagy akár egy megjegyzést. Az API okos felépítésének köszönhetően te mint fejlesztő egyszerűen és könnyen dolgozhatod fel a felhasználó kéréseit, több különböző módon.

Egy valós applikációban dinamikus framework-öt kellene készítened, amit megosztva használ az iOS app és a kiegészítők. Ezzel az architektúrával viszont az üzleti logikát több targetben is felhasználhatod. Nem szükséges minden alkalommal külön implementálnod, csak egyszer minden targetre!

Intents UI kiegészítő

A tutorial utolsó részében megmutatom hogyan változtathatod meg a Siri user interface-t.

Ne felejtsd el beállítani az ExtensionUI Info.plist-jében azt az intent class-t amit kezelni szeretnél.

Nyisd meg az Intents UI kiegészítőt és látni fogod a sablont amit az Xcode létrehozott. Lesz benne egy IntentViewController, ami az UIViewController alosztálya, ami az INUIHostedViewControlling protokollt implementálja. Egy Storyboard fájlt is létrehozott a rendszer; nyisd meg ezt is, hogy elkezdhessük a user interface testreszabását.

Adj hozzá egy UIImageView-t mint háttér, és egy label-t középre. Töltsd le a háttérképet, importáld az Intents UI targetbe, és állítsd be ezt az UIImageView-ben képként. Hozz létre egy UILabel objektumot és tedd a képernyő közepére. Használhatod az AutoLayout-ot is, hogy könnyebben beállíthasd a Storyboard határait.

Nyisd meg az Assistant Editort, hozz létre egy @IBOutlet-et a labelhez és nevezd el contentLabel-nek. Az eredménynek így kell kinéznie:

Storyboard showing the new IntentsUI view

Nyisd meg az IntentViewController fájlt és látni fogsz egy rakás példakódot. Kitörölhetsz mindent, kivéve a configure(with:context:completion:) metódust, amit most fogunk implementálni. Ez a metódus akkor hívódik meg, amikor a user interface konfigurálásra kész. Most be kell állítanunk az UILabel tartalmát.

Először is ellenőrizzük, hogy az intent objektum típusa INSendPaymentIntent legyen. Ha a típus helyes, akkor meg kell győződnünk róla, hogy a property amit megjelenítünk nem nil. Ha igen, akkor egyszerűen meghívjuk a lezáró blokkot nulla mérettel, hogy elrejtsük a felhasználó elől. Ha minden úgy megy ahogy szeretnénk, akkor létrehozunk egy string-et azokkal az adatokkal, amiket meg akarunk mutatni a felhasználónak, és ezt beállítjuk a contentLabel szövegének.

Futtasd le a kiegészítőt, és látni fogod az új view-t a Siriben!

New custom UI in Siri extension

Siri még mindig az alapértelmezett view-t mutatja. Ezt elrejthetjük azzal, ha a controller-ünk megfelel az INUIHostedViewSiriProviding protokollnak.

Hogyha a displaysPaymentTransaction visszatérési értéke true, akkor azt mondjuk Sirinek hogy a view controller-ünk végzi szükséges információk megjelenítését, és az alapértelmezett view-t el lehet rejteni. A végeredmény sokkal letisztultabb lett!

Final result of the custom UI displayed by Siri

Megjegyzés: mint ahogy a képen is látható, amikor nem amerikai dollárban adod meg a pénznemet, Siri helyesen értelmezi azt, és a megfelelő pénznem kódot küldi vissza a kiegészítőnek. Sajnos a szövegben mindig dollárt jelenít meg. Ezt a bug-ot már jeleztem az Apple-nek!

Végszó

Remélem tetszett ez a tutorial. A Siri nagyon hasznos dolog, még ha jelenleg csak bizonyos típusú alkalmazásokkal is működik együtt. Hogyha a saját alkalmazásaidban tervezed implementálni, reklámozd a felhasználóidnak, mert lehet hogy nem is tudják hogy milyen menő és fejlett lett az alkalmazásod!

Hogyha többet szeretnél tudni a Siri appokba való integrálásáról, vagy ha az iOS 10 más érdekes fejlesztői funkcióiről olvasnál, olvasd el Markus Mühlberger kurzusát.

Ezen kívül nézd meg a többi ingyenes iOS 10 tutorialunkat is.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.