Ios Siri-联系人搜索行为类似于skype的音频呼叫
我正在实施一个VoIP应用程序,需要通过Siri发起呼叫。我可以通过Siri发起一个电话。但问题是——每次应用程序启动时,尽管联系人不在应用程序的联系人列表中Ios Siri-联系人搜索行为类似于skype的音频呼叫,ios,objective-c,sirikit,Ios,Objective C,Sirikit,我正在实施一个VoIP应用程序,需要通过Siri发起呼叫。我可以通过Siri发起一个电话。但问题是——每次应用程序启动时,尽管联系人不在应用程序的联系人列表中 - (void)resolveContactsForStartAudioCall:(INStartAudioCallIntent *)intent withCompletion:(void (^)(NSArray<INPersonResolutionResult *>
- (void)resolveContactsForStartAudioCall:(INStartAudioCallIntent *)intent
withCompletion:(void (^)(NSArray<INPersonResolutionResult *> *resolutionResults))completion{
NSArray<INPerson *> *recipients = intent.contacts;
NSMutableArray<INPersonResolutionResult *> *resolutionResults = [NSMutableArray array];
if (recipients.count == 0) {
completion(@[[INPersonResolutionResult needsValue]]);
return;
}else if(recipients.count==1){
if([self containContact:recipients.firstObject.displayName]){
[resolutionResults addObject:[INPersonResolutionResult successWithResolvedPerson:recipients.firstObject]];
}else [resolutionResults addObject:[INPersonResolutionResult unsupported]];
}else if(recipients.count>1){
[resolutionResults addObject:[INPersonResolutionResult disambiguationWithPeopleToDisambiguate:recipients]];
}else{
[resolutionResults addObject:[INPersonResolutionResult unsupported]];
}
completion(resolutionResults);
}
- (BOOL)containContact:(NSString *)displayName {
//fetch contacts and check, if exist retun YES else NO
}
我不知道该如何处理,在哪里处理。我的意思是,如果应用程序没有像Skype那样的联系人,就不要启动该应用程序。Skype的回答如下:
嗯,Skype没有找到
你想给谁打电话
下面是我的扩展处理程序代码片段:
- (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.
return self;
}
#pragma mark - INStartAudioCallIntentHandling
- (void)resolveContactsForStartAudioCall:(INStartAudioCallIntent *)intent
withCompletion:(void (^)(NSArray<INPersonResolutionResult *> *resolutionResults))completion{
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);
}
-(id)handlerForIntent:(INIntent*)intent{
//这是默认实现。如果希望不同的对象处理不同的意图,
//您可以重写此操作并返回用于该特定目的的处理程序。
回归自我;
}
#pragma标记-InstartAudioCallinetHandling
-(无效)解析Contacts for StartAudioCall:(InstartAudioCallinent*)意图
完成:(作废(^)(NSArray*决议结果))完成{
NSArray*recipients=intent.contacts;
NSMutableArray*resolutionResults=[NSMutableArray];
如果(recipients.count==0){
完成(@[[InputPersonResolutionResult needsValue]]);
返回;
}else if(recipients.count==1){
[resolutionResults addObject:[InputersonResolutionResult successWithResolvedPerson:recipients.firstObject];
}else if(收件人计数>1){
[resolutionResults addObject:[InputersonResolutionResult DismobiliationWithPeopleToDismobiliate:recipients];
}否则{
[resolutionResults addObject:[InputersonResolutionResult不支持]];
}
完成(解决结果);
}
-(无效)确认StartAudioCall:(InstartAudioCalinent*)意图
完成:(无效(^)(InstartAudioCallinentResponse*响应))完成{
NSSerActivity*userActivity=[[NSSerActivity alloc]initWithActivityType:NSStringFromClass([InstartAudioCallinent类]);
InstartAudioCallinentResponse*response=[[InstartAudioCallinentResponse alloc]initWithCode:InstartAudioCallinentResponseDerady用户活动:用户活动];
完成(答复);
}
-(无效)handleStartAudioCall:(InstartAudioCallinent*)意图
完成:(无效(^)(InstartAudioCallinentResponse*响应))完成{
NSSerActivity*userActivity=[[NSSerActivity alloc]initWithActivityType:NSStringFromClass([InstartAudioCallinent类]);
InstartAudioCallinentResponse*response=[[InstartAudioCallinentResponse alloc]initWithCode:InstartAudioAllinentResponseDeContinueInApp用户活动:用户活动];
完成(答复);
}
您可以在resolveContactsForStartAudioCall
方法中处理该问题,检查您的应用程序联系人列表中是否包含您想要的联系人
- (void)resolveContactsForStartAudioCall:(INStartAudioCallIntent *)intent
withCompletion:(void (^)(NSArray<INPersonResolutionResult *> *resolutionResults))completion{
NSArray<INPerson *> *recipients = intent.contacts;
NSMutableArray<INPersonResolutionResult *> *resolutionResults = [NSMutableArray array];
if (recipients.count == 0) {
completion(@[[INPersonResolutionResult needsValue]]);
return;
}else if(recipients.count==1){
if([self containContact:recipients.firstObject.displayName]){
[resolutionResults addObject:[INPersonResolutionResult successWithResolvedPerson:recipients.firstObject]];
}else [resolutionResults addObject:[INPersonResolutionResult unsupported]];
}else if(recipients.count>1){
[resolutionResults addObject:[INPersonResolutionResult disambiguationWithPeopleToDisambiguate:recipients]];
}else{
[resolutionResults addObject:[INPersonResolutionResult unsupported]];
}
completion(resolutionResults);
}
- (BOOL)containContact:(NSString *)displayName {
//fetch contacts and check, if exist retun YES else NO
}
-(void)解析Contacts for StartAudioCall:(InstartAudioCallinent*)意图
完成:(作废(^)(NSArray*决议结果))完成{
NSArray*recipients=intent.contacts;
NSMutableArray*resolutionResults=[NSMutableArray];
如果(recipients.count==0){
完成(@[[InputPersonResolutionResult needsValue]]);
返回;
}else if(recipients.count==1){
if([self-containContact:recipients.firstObject.displayName]){
[resolutionResults addObject:[InputersonResolutionResult successWithResolvedPerson:recipients.firstObject];
}else[resolutionResults addObject:[InputersonResolutionResult不支持]];
}else if(收件人计数>1){
[resolutionResults addObject:[InputersonResolutionResult DismobiliationWithPeopleToDismobiliate:recipients];
}否则{
[resolutionResults addObject:[InputersonResolutionResult不支持]];
}
完成(解决结果);
}
-(BOOL)containContact:(NSString*)显示名称{
//获取联系人并检查,如果存在,请重新运行“是”或“否”
}
请注意,如果要将联系人从应用程序共享到任何扩展,可能需要启用应用程序组支持。以下是一些准则:
讨论。“我想我们可以停止投票了。”汤马斯韦勒谢谢你的回复。我试图在元讨论中澄清这一点。这个错误是我的,我为此道歉。但还是投了反对票。