// // IntentHandler.m // HDLSceneSiri // // Created by ι™ˆε˜‰δΉ on 2021/11/25. // #import "IntentHandler.h" #import "HDLRunSceneIntent.h" #import "HDLSceneHandler.h" // As an example, this class is set up to handle Message intents. // You will want to replace this or add other intents as appropriate. // The intents you wish to handle must be declared in the extension's Info.plist. // You can test your example integration by saying things to Siri like: // "Send a message using " // " John saying hello" // "Search for messages in " @interface IntentHandler () @end @implementation IntentHandler - (id)handlerForIntent:(INIntent *)intent { // 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. if (@available(iOS 12.0, *)) { if ([intent isKindOfClass:[HDLRunSceneIntent class]]) { return [[HDLSceneHandler alloc] init]; } } return self; } // //#pragma mark - INSendMessageIntentHandling // //// Implement resolution methods to provide additional information about your intent (optional). //- (void)resolveRecipientsForSendMessage:(INSendMessageIntent *)intent with:(void (^)(NSArray *resolutionResults))completion { // NSArray *recipients = intent.recipients; // // If no recipients were provided we'll need to prompt for a value. // if (recipients.count == 0) { // completion(@[[INSendMessageRecipientResolutionResult needsValue]]); // return; // } // NSMutableArray *resolutionResults = [NSMutableArray array]; // // for (INPerson *recipient in recipients) { // NSArray *matchingContacts = @[recipient]; // Implement your contact matching logic here to create an array of matching contacts // if (matchingContacts.count > 1) { // // We need Siri's help to ask user to pick one from the matches. // [resolutionResults addObject:[INSendMessageRecipientResolutionResult disambiguationWithPeopleToDisambiguate:matchingContacts]]; // // } else if (matchingContacts.count == 1) { // // We have exactly one matching contact // [resolutionResults addObject:[INSendMessageRecipientResolutionResult successWithResolvedPerson:recipient]]; // } else { // // We have no contacts matching the description provided // [resolutionResults addObject:[INSendMessageRecipientResolutionResult unsupported]]; // } // } // completion(resolutionResults); //} // //- (void)resolveContentForSendMessage:(INSendMessageIntent *)intent withCompletion:(void (^)(INStringResolutionResult *resolutionResult))completion { // NSString *text = intent.content; // if (text && ![text isEqualToString:@""]) { // completion([INStringResolutionResult successWithResolvedString:text]); // } else { // completion([INStringResolutionResult needsValue]); // } //} // //// Once resolution is completed, perform validation on the intent and provide confirmation (optional). // //- (void)confirmSendMessage:(INSendMessageIntent *)intent completion:(void (^)(INSendMessageIntentResponse *response))completion { // // Verify user is authenticated and your app is ready to send a message. // // NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:NSStringFromClass([INSendMessageIntent class])]; // INSendMessageIntentResponse *response = [[INSendMessageIntentResponse alloc] initWithCode:INSendMessageIntentResponseCodeReady userActivity:userActivity]; // completion(response); //} // //// Handle the completed intent (required). // //- (void)handleSendMessage:(INSendMessageIntent *)intent completion:(void (^)(INSendMessageIntentResponse *response))completion { // // Implement your application logic to send a message here. // // NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:NSStringFromClass([INSendMessageIntent class])]; // INSendMessageIntentResponse *response = [[INSendMessageIntentResponse alloc] initWithCode:INSendMessageIntentResponseCodeSuccess userActivity:userActivity]; // completion(response); //} // //// Implement handlers for each intent you wish to handle. As an example for messages, you may wish to also handle searchForMessages and setMessageAttributes. // //#pragma mark - INSearchForMessagesIntentHandling // //- (void)handleSearchForMessages:(INSearchForMessagesIntent *)intent completion:(void (^)(INSearchForMessagesIntentResponse *response))completion { // // Implement your application logic to find a message that matches the information in the intent. // // NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:NSStringFromClass([INSearchForMessagesIntent class])]; // INSearchForMessagesIntentResponse *response = [[INSearchForMessagesIntentResponse alloc] initWithCode:INSearchForMessagesIntentResponseCodeSuccess userActivity:userActivity]; // // Initialize with found message's attributes // response.messages = @[[[INMessage alloc] // initWithIdentifier:@"identifier" // content:@"I am so excited about SiriKit!" // dateSent:[NSDate date] // sender:[[INPerson alloc] initWithPersonHandle:[[INPersonHandle alloc] initWithValue:@"sarah@example.com" type:INPersonHandleTypeEmailAddress] nameComponents:nil displayName:@"Sarah" image:nil contactIdentifier:nil customIdentifier:nil] // recipients:@[[[INPerson alloc] initWithPersonHandle:[[INPersonHandle alloc] initWithValue:@"+1-415-555-5555" type:INPersonHandleTypePhoneNumber] nameComponents:nil displayName:@"John" image:nil contactIdentifier:nil customIdentifier:nil]] // ]]; // completion(response); //} // //#pragma mark - INSetMessageAttributeIntentHandling // //- (void)handleSetMessageAttribute:(INSetMessageAttributeIntent *)intent completion:(void (^)(INSetMessageAttributeIntentResponse *response))completion { // // Implement your application logic to set the message attribute here. // // NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:NSStringFromClass([INSetMessageAttributeIntent class])]; // INSetMessageAttributeIntentResponse *response = [[INSetMessageAttributeIntentResponse alloc] initWithCode:INSetMessageAttributeIntentResponseCodeSuccess userActivity:userActivity]; // completion(response); //} @end