hu en it en en en en en en en en en en en en en en en en en en en en en en en en en en en en en fr en en fr en en en en en en en en en it en en en en en en en en en en en de en en en en en en en en it it en en en en en en en de en en en en en en en en en en en ja en en en en en en en en en en en en en en en en en en en en en en en zh en en en en en en en en en nb en en en en en en en en en en en en en en en en pt en en en bn en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en it en en en en en kn en en en en en en en en en en en en en en en en en en kn en ja en en en en en en en en en it en de jbo id en en en ceb ko en en en en it en en de en en pl en en ru fr fr ceb ru ceb en en en en en en en en en en en en en en en en en en en kn en en en en en en en en en en en en en en en en kn en en en en en en en it en de jbo id en en en en en en en it en en de en en pl en en en en en en en en hu en en en en en en en th en en en hu hu hu en hu de hu hu hu hu hu hu hu hu hu hu hu hu hu hu hu hu hu de hu hu hu hu hu hu hu hu hu hu en hu en hu hu hu hu hu hu en hu hu hu es en en en hu en hu hu hu hu hu hu hu hu hu hu hu hu en hu hu hu en hu hu hu hu hu en hu de hu en hu de en hu en en hu fr en en en pt en en en en en fr en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en kn en en en kn en en ml en kn en en en en en en en en en pt en en en pa en en en en en en en en en en en en en ceb en en en en en en en en fr ru en en en en en it en en en en en en en en fi en en es en en en en fr fr en en en en en ar en
SiriKit kiegészítők készítése iOS 10-ben
7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Photo & Video View all Photo & Video
popular software in Photo & Video
Web Design View all Web Design
popular software in Web Design
SiriKit kiegészítők készítése iOS 10-ben
Patrick Balestra Jan 6, 2017
Read Time: 9 mins English Español Magyar ภาษาไทย
iOS SDKiOS 10SwiftMobile AppMobile Development
Hungarian (Magyar) translation by Andras Czegledi (you can also view the original English article)
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.
Az iOS 10 újdonságai (What's New in iOS 10)
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)
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!
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:
A SiriKit bemutatása (Introducing SiriKit - Session 217)
Appok kiegészítése SiriKit-tel (Extending Your Apps with SiriKit - Session 225)
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.
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.
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.
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.
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!
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:
import UIKit import Intents class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Ask permission to access Siri INPreferences.requestSiriAuthorization { authorizationStatus in switch authorizationStatus { case .authorized: print("Authorized") default: print("Not Authorized") } } } }
A dialógusablak ami az első indításnál fogadja majd a felhasználót így néz ki.
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!
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.
class IntentHandler: INExtension { override func handler(for intent: INIntent) -> Any? { // This is the default implementation. If you want different objects to handle different intents, // you can override this and return the handler you want for that particular intent. return self } }
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é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.
extension IntentHandler: INSendPaymentIntentHandling { func handle(sendPayment intent: INSendPaymentIntent, completion: @escaping (INSendPaymentIntentResponse) -> Void) { // Check that we have valid values for payee and currencyAmount guard let payee = intent.payee, let amount = intent.currencyAmount else { return completion(INSendPaymentIntentResponse(code: .unspecified, userActivity: nil)) } // Make your payment! print("Sending \(amount) payment to \(payee)!") completion(INSendPaymentIntentResponse(code: .success, userActivity: nil)) } }
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.
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!
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.
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!
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:
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.
class IntentViewController: UIViewController, INUIHostedViewControlling { @IBOutlet weak var contentLabel: UILabel! // MARK: - INUIHostedViewControlling func configure(with interaction: INInteraction!, context: INUIHostedViewContext, completion: ((CGSize) -> Void)!) { if let paymentIntent = interaction.intent as? INSendPaymentIntent { // If any of this properties is not set, use the default UI. guard let amount = paymentIntent.currencyAmount?.amount, let currency = paymentIntent.currencyAmount?.currencyCode, let name = paymentIntent.payee?.displayName else { return completion(CGSize.zero) } let paymentDescription = "\(amount)\(currency) to \(name)" contentLabel.text = paymentDescription } if let completion = completion { completion(self.desiredSize) } } var desiredSize: CGSize { return self.extensionContext!.hostedViewMaximumAllowedSize } }
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!
Siri még mindig az alapértelmezett view-t mutatja. Ezt elrejthetjük azzal, ha a controller-ünk megfelel az INUIHostedViewSiriProviding protokollnak.
class IntentViewController: UIViewController, INUIHostedViewControlling, INUIHostedViewSiriProviding { // Previous code goes here... var displaysPaymentTransaction: Bool { return true } }
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!
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!
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.
Az iOS 10 újdonságai (What's New in iOS 10)
Ezen kívül nézd meg a többi ingyenes iOS 10 tutorialunkat is.
Frissítsd az app-odat iOS 10-re (Update Your App to iOS 10)
iOS 10: Egyéni notifikációs interface-ek készítése (iOS 10: Creating Custom Notification Interfaces)
Rezgő visszajelzés iOS 10-ben (Haptic Feedback in iOS 10)
iOS SDKiOS 10SwiftMobile AppMobile Development
Did you find this post useful?
Would you like to provide feedback (optional)?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Informatics Student at the University of Lugano, Switzerland. WWDC 2014-2015-2017 Student Scholarship Recipient. I enjoy creating beautiful iOS applications.
Download Attachment View on GitHub
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.
Get access to over one million creative assets on Envato Elements.
Over 9 Million Digital Assets
Everything you need for your next creative project.
Create Beautiful Logos, Designs
& Mockups in Seconds
Design like a professional without Photoshop.
Share ideas. Host meetups. Lead discussions. Collaborate.
Quick LinksExplore popular categories
Curated Web Design Assets
WordPress Themes for Consultants
Web Themes & Templates
After Effects Slideshow Templates
Premiere Pro Video Intro Templates
Final Cut Pro Templates
Final Cut Pro Title Templates
Premiere Pro Video Effects
Keynote Pitch Deck Templates
Google Slides Business Templates
PowerPoint Pitch Deck Templates
Best Shopify Mobile Themes
Video To Gif Converter
How to Use WordPress
How to Use PowerPoint
Teach at Envato Tuts+
Translate for Envato Tuts+
© 2022 Envato Pty Ltd. Trademarks and brands are the property of their respective owners.