Sirikit StartAudioCall Fail

Предыстория теста: Xcode: Xcode8 beta6 iPhone: iOS10 beta6 Язык: object-c

Я использовал startAudioCall sirikit в своем приложении, чтобы проверить вызов моего приложения. Однако в некоторых ситуациях сирикит не работает: если имя человека является именем в локальном контакте, когда я говорю «Позвони по имени в мое приложение», siri может запустить мое приложение, чтобы успешно получить это имя контакта. Но если имя человека является и именем, и фамилия, когда я говорю «Позвонить по имени (или как по имени, так и по фамилии) в мое приложение», Siri позвонит этому человеку с помощью телефонного звонка (не в мое приложение)

Например: если Джон в моем телефонном контакте, и я говорю «позвонить Джону в мое приложение», это запустит мое приложение и успешно получит это имя контакта. Но если Джон Смит в моем телефонном контакте и я говорю «позвонить Джону (или Джону Смиту) в мое приложение», Siri будет использовать телефонный звонок, чтобы позвонить этому человеку (не в мое приложение).

- (void)resolveContactsForStartAudioCall:(INStartAudioCallIntent *)intent
                      withCompletion:(void (^)(NSArray<INPersonResolutionResult *> *resolutionResults))completion{
NSLog(@"maytest resolveContactsForStartAudioCall");


NSArray<INPerson *> *recipients = intent.contacts;

NSMutableArray<INPersonResolutionResult *> *resolutionResults = [NSMutableArray array];



if (recipients.count == 0) {

    completion(@[[INPersonResolutionResult needsValue]]);
    return;
}else if(recipients.count==1){
    [resolutionResults addObject:[INPersonResolutionResult successWithResolvedPerson:recipients.firstObject]];
}else if(recipients.count>1){
     [resolutionResults addObject:[INPersonResolutionResult disambiguationWithPeopleToDisambiguate:recipients]];
}else{
    [resolutionResults addObject:[INPersonResolutionResult unsupported]];

}
completion(resolutionResults); 
}

- (void)confirmStartAudioCall:(INStartAudioCallIntent *)intent
               completion:(void (^)(INStartAudioCallIntentResponse *response))completion{

NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:NSStringFromClass([INStartAudioCallIntent class])];
INStartAudioCallIntentResponse *response = [[INStartAudioCallIntentResponse alloc] initWithCode:INStartAudioCallIntentResponseCodeReady userActivity:userActivity];
completion(response);
}

- (void)handleStartAudioCall:(INStartAudioCallIntent *)intent
              completion:(void (^)(INStartAudioCallIntentResponse *response))completion{
NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:NSStringFromClass([INStartAudioCallIntent class])];

INStartAudioCallIntentResponse *response = [[INStartAudioCallIntentResponse alloc] initWithCode:INStartAudioCallIntentResponseCodeContinueInApp userActivity:userActivity];
completion(response);
}

И вот мой код об аудиовызове. Кто-нибудь может помочь? Большое спасибо


person Vaycent    schedule 27.08.2016    source источник
comment
Итак, когда вы говорите, позвоните Джону в myApp, а Siri использует телефон вместо вашего приложения, вызывается ли ваш метод resolveContactsForStartAudioCall?   -  person rocky    schedule 03.09.2016
comment
Нет, до разрешения ContactsForStartAudioCall этой функции дело не дойдет, так что я понятия не имею, как контролировать этот случай.   -  person Vaycent    schedule 04.09.2016


Ответы (1)


Я исправил эту проблему после того, как изменил имя приложения с «ST Wifi Calling» на «testApp».

Теперь, независимо от того, говорю ли я «Используйте testApp, чтобы позвонить Джону» или «Используйте testApp, чтобы позвонить Джону Смиту», все идет хорошо на sirikit.

Я думаю, Siri слишком сложно распознать длинное имя приложения с пробелом.

person Vaycent    schedule 17.10.2016
comment
Этот парень сообщил о той же проблеме, и ему сказали подать радар. Мое приложение Kitchen Wall не работает, но если я изменю отображаемое имя на KitchenWall, оно будет работать отлично. forums.developer.apple.com/message/171140#171140 - person Chad Pavliska; 25.09.2017