JLChen
2021-11-26 f26dfd48aa7bf4c194863cc3b3f47d38bc8a2d57
2021-11-26 1.更新
4个文件已修改
194 ■■■■ 已修改文件
HDLSceneSiriDemo/HDLSceneSiri/IntentHandler.m 178 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/ApiDefinition.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri.csproj 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Structs.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSceneSiriDemo/HDLSceneSiri/IntentHandler.m
@@ -18,7 +18,7 @@
// "<myApp> John saying hello"
// "Search for messages in <myApp>"
@interface IntentHandler () <INSendMessageIntentHandling, INSearchForMessagesIntentHandling, INSetMessageAttributeIntentHandling>
@interface IntentHandler ()
@end
@@ -35,93 +35,93 @@
    
    return self;
}
#pragma mark - INSendMessageIntentHandling
// Implement resolution methods to provide additional information about your intent (optional).
- (void)resolveRecipientsForSendMessage:(INSendMessageIntent *)intent with:(void (^)(NSArray<INSendMessageRecipientResolutionResult *> *resolutionResults))completion {
    NSArray<INPerson *> *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<INSendMessageRecipientResolutionResult *> *resolutionResults = [NSMutableArray array];
    for (INPerson *recipient in recipients) {
        NSArray<INPerson *> *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);
}
//
//#pragma mark - INSendMessageIntentHandling
//
//// Implement resolution methods to provide additional information about your intent (optional).
//- (void)resolveRecipientsForSendMessage:(INSendMessageIntent *)intent with:(void (^)(NSArray<INSendMessageRecipientResolutionResult *> *resolutionResults))completion {
//    NSArray<INPerson *> *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<INSendMessageRecipientResolutionResult *> *resolutionResults = [NSMutableArray array];
//
//    for (INPerson *recipient in recipients) {
//        NSArray<INPerson *> *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
Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/ApiDefinition.cs
@@ -45,7 +45,7 @@
    }
    // @interface HDLRunSceneIntent : INIntent
    [Watch(5, 0), NoTV, Mac(11, 0), iOS(12, 0)]
    //[Watch(5, 0), NoTV, Mac(11, 0), iOS(12, 0)]
    [BaseType(typeof(INIntent))]
    interface HDLRunSceneIntent
    {
@@ -68,9 +68,11 @@
  protocol, then [Model] is redundant and will generate code that will never
  be used.
*/
    [Watch(5, 0), NoTV, Mac(11, 0), iOS(12, 0)]
    [Protocol]
    [BaseType(typeof(NSObject))]
    //[Watch(5, 0), NoTV, Mac(11, 0), iOS(12, 0)]
    //[Protocol]
    [Protocol, Model]
    [BaseType(typeof(NSObject))]
    interface HDLRunSceneIntentHandling
    {
        // @required -(void)handleHDLRunScene:(HDLRunSceneIntent * _Nonnull)intent completion:(void (^ _Nonnull)(HDLRunSceneIntentResponse * _Nonnull))completion __attribute__((swift_name("handle(intent:completion:)")));
@@ -84,7 +86,7 @@
    }
    // @interface HDLRunSceneIntentResponse : INIntentResponse
    [Watch(5, 0), NoTV, Mac(11, 0), iOS(12, 0)]
    //[Watch(5, 0), NoTV, Mac(11, 0), iOS(12, 0)]
    [BaseType(typeof(INIntentResponse))]
    [DisableDefaultCtor]
    interface HDLRunSceneIntentResponse
Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri.csproj
@@ -48,7 +48,7 @@
  <ItemGroup>
    <NativeReference Include="Library\libHDLSceneSiri.a">
      <Kind>Static</Kind>
      <Frameworks>Intents IntentsUI</Frameworks>
      <Frameworks>Intents IntentsUI Foundation</Frameworks>
    </NativeReference>
  </ItemGroup>
  <Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.ObjCBinding.CSharp.targets" />
Shared.IOS.HDLSceneSiri/Shared.IOS.HDLSceneSiri/Structs.cs
@@ -2,7 +2,7 @@
namespace HDLSceneSiri
{
    [Watch(5, 0), NoTV, Mac(11, 0), iOS(12, 0)]
    //[Watch(5, 0), NoTV, Mac(11, 0), iOS(12, 0)]
    [Native]
    public enum HDLRunSceneIntentResponseCode : long
    {