of your app to Siri. • It can accelerate the user to perform a key function of your app. • It should be of persistent interest to the user. • It should be executable at any time.
-> new Target then create Intents Extension. • Check the target membership. The Intent should be visible to Intents Extension. • Make the Intents Extension confirm the Handling Protocol. Handle
• Opens something in your app • Represents showing items that you index in Spotlight or offer for Handoff • For the best experience, adopt Intents. Intents-based shortcuts can: • Run inline, without launching your app • Include custom voice response or a custom UI Include granular predictions
public var waitTime: String? { get set } public var soup: INObject? { get set } public convenience init(code: OrderSoupIntentResponseCode, userActivity: NSUserActivity?) public static func success(soup: INObject, waitTime: String) -> OrderSoupIntentResponse public static func failureOutOfStock(soup: INObject) -> OrderSoupIntentResponse } Code Generation Voice Response
• NSUserActivity • requiredUserInfoKeys: Minimal amount of information necessary for restoration which used to find patters. • INIntent • Shortcut types: Find the most appropriate parameter combination.
presented to the user Used when preparing the intent for donation intent.suggestedInvocationPhrase = NSString.deferredLocalizedIntentsString(with: “Go to Mars!")
for your order! $8, office Soup Chef # Your clam chowder will be delivered to One Apple Park Way soon. Done Done Add to Siri INUIAddVoiceShortcutViewController INUIEditVoiceShortcutViewController Available shortcuts list API?! See nothing in documents…
NSSecureCoding { @NSCopying open var shortcut: INShortcut { get } @NSCopying open var relevanceProviders: [INRelevanceProvider] @NSCopying open var watchTemplate: INDefaultCardTemplate? public init(shortcut: INShortcut) }
{ open class var `default`: INRelevantShortcutStore { get } open func setRelevantShortcuts(_ shortcuts: [INRelevantShortcut], completionHandler: ((Error?) -> Void)? = nil) }
in Info.plist Donate when visible let userActivity = NSUserActivity(activityType: "MyActivityType") userActivity.becomeCurrent() let userActivity = NSUserActivity(activityType: "MyActivityType") interfaceController.updateUserActivity(activityType) NEW NSUserActivity
let intent = /* Create intent and set parameters */ let interaction = INInteraction(intent: intent, response: nil) interaction.donate(completion: nil) INIntent
var startDate: Date { get } open var endDate: Date? { get } public init(start startDate: Date, end endDate: Date?) } let startEvent = /* event start time */ let endEvent = /* event end time */ let relevanceProvider = INDateRelevanceProvider(start: startEvent, end: endEvent)
open var region: CLRegion { get } public init(region: CLRegion) } let center = CLLocationCoordinate2D(latitude: 37.334728, longitude: -122.008883) let region = CLCircularRegion(center: center, radius: 2.0, identifier: "Apple Park") let relevanceProvider = INLocationRelevanceProvider(region: region)
enum Situation : Int { case morning case evening case home case work case school case gym } open var situation: Situation { get } public init(situation: Situation) } let relevanceProvider = INDailyRoutineRelevanceProvider(situation: .gym)
enum Situation : Int { case morning case evening case home case work case school case gym } open var situation: Situation { get } public init(situation: Situation) } let relevanceProvider = INDailyRoutineRelevanceProvider(situation: .gym)