Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Siri-联系人搜索行为类似于skype的音频呼叫_Ios_Objective C_Sirikit - Fatal编程技术网

Ios Siri-联系人搜索行为类似于skype的音频呼叫

Ios Siri-联系人搜索行为类似于skype的音频呼叫,ios,objective-c,sirikit,Ios,Objective C,Sirikit,我正在实施一个VoIP应用程序,需要通过Siri发起呼叫。我可以通过Siri发起一个电话。但问题是——每次应用程序启动时,尽管联系人不在应用程序的联系人列表中 - (void)resolveContactsForStartAudioCall:(INStartAudioCallIntent *)intent withCompletion:(void (^)(NSArray<INPersonResolutionResult *>

我正在实施一个VoIP应用程序,需要通过Siri发起呼叫。我可以通过Siri发起一个电话。但问题是——每次应用程序启动时,尽管联系人不在应用程序的联系人列表中

- (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*)显示名称{
//获取联系人并检查,如果存在,请重新运行“是”或“否”
}
请注意,如果要将联系人从应用程序共享到任何扩展,可能需要启用应用程序组支持。以下是一些准则:


  • 讨论。“我想我们可以停止投票了。”汤马斯韦勒谢谢你的回复。我试图在元讨论中澄清这一点。这个错误是我的,我为此道歉。但还是投了反对票。