iOS Callkit:CXProvider在启动后立即重置

Dep*_*o B 5 objective-c ios callkit

我正在将现有的VoIP应用程序转换为Callkit.我有很多代码,但不知何故,当我初始化CXProvider时,它将调用providerDidBegin,然后立即调用providerDidReset.它没有给出理由.之后我无法注册其中一个外拨电话,因为我的提供商没有激活.

我已经尝试过查看证书,设置等等,但基本上我不需要比我已经拥有的VoIP应用程序更多.

CallKit调用reset方法的调用如下:

CallKit`__42- [CXProvider handleConnectionInterruption] _block_invoke:

当我深入挖掘它的来源时,它与NSXPCConnection有关.这是什么联系,我该如何设置它?

当然,连接没有中断.

这是我初始化我的代表的方式:

- (id)init {
    self = [super init];

    self.configuration = [[ProviderConfiguration alloc] init];
    self.provider = [[CXProvider alloc] initWithConfiguration:self.configuration];

    [self.provider setDelegate:self queue:dispatch_get_main_queue()];

    return self;
}
Run Code Online (Sandbox Code Playgroud)

这就是配置的样子:

- (instancetype)init {
    self = [super initWithLocalizedName:@"MyCompany"];

    self.supportsVideo = NO;
    self.maximumCallsPerCallGroup = 1;
    self.supportedHandleTypes = [[NSSet alloc] initWithObjects:[NSNumber numberWithInt:(int)CXHandleTypePhoneNumber], nil];
    self.maximumCallGroups = 1;
    self.maximumCallsPerCallGroup = 5;


    return self;
}
Run Code Online (Sandbox Code Playgroud)

两个回调都已实现:

- (void)providerDidBegin:(CXProvider *)provider {
    NSLog(@"Begun");
}

- (void)providerDidReset:(CXProvider *)provider {
    NSLog(@"Reset");
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*llo 12

在我的情况下,同样的问题是由于Info.plist文件中缺少VOIP后台模式

<key>UIBackgroundModes</key>
<array>
    <string>audio</string>
    <string>voip</string>
</array>
Run Code Online (Sandbox Code Playgroud)

由于某些未知原因,XCode 9不允许使用"功能"选项卡设置此背景模式.