Objective-C应用程序的呼叫目录扩展未识别呼叫者

时间:2017-11-13 12:41:19

标签: ios objective-c iphone callkit

我正在尝试将Call Directory Extension添加到现有的Objective-C iOS应用程序。

使用Xcode -> File -> New -> Target直接创建扩展,选择Call Directory Extension并为Objective-C和现有项目进行配置。还成功地创建了一个新的扩展方案。

扩展程序的CallDirectoryHandler.hCallDirectoryHandler.m文件已自动创建,目前我只想通过将电话号码从真实设备硬编码到其中来测试一般概念。

该真实设备的数字格式如下:

+49 176 12345678

到目前为止,我只注释了自动生成的代码,指的是阻塞号码(我不想这样做),并更改了代码中的电话号码和字符串以识别号码。

代码如下所示:

- (void)addAllIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {
    CXCallDirectoryPhoneNumber allPhoneNumbers[] = { 4917612345678, 4917612345679 };
    NSArray<NSString *> *labels = @[ @"XYZ Dev-Test", @"Test Number" ];
    NSUInteger count = (sizeof(allPhoneNumbers) / sizeof(CXCallDirectoryPhoneNumber));
    for (NSUInteger i = 0; i < count; i += 1) {
        CXCallDirectoryPhoneNumber phoneNumber = allPhoneNumbers[i];
        NSString *label = labels[i];
        [context addIdentificationEntryWithNextSequentialPhoneNumber:phoneNumber label:label];
    }
}

- (void)addOrRemoveIncrementalIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {
    CXCallDirectoryPhoneNumber phoneNumbersToAdd[] = { 4917612345678 };
    NSArray<NSString *> *labelsToAdd = @[ @"XYZ Dev-Test Inc" ];
    NSUInteger countOfPhoneNumbersToAdd = (sizeof(phoneNumbersToAdd) / sizeof(CXCallDirectoryPhoneNumber));

    for (NSUInteger i = 0; i < countOfPhoneNumbersToAdd; i += 1) {
        CXCallDirectoryPhoneNumber phoneNumber = phoneNumbersToAdd[i];
        NSString *label = labelsToAdd[i];
        [context addIdentificationEntryWithNextSequentialPhoneNumber:phoneNumber label:label];
    }
}

同样,这是自动生成的代码,我只更改了其中的电话号码和字符串。

我已在Settings -> Phone -> Call blocking & identification下启用了扩展程序,并已多次切换开关。

然而,当我从该号码拨打电话时,它永远不会被识别出来。我已经在代码中尝试了以下数字格式:

+4917612345678
4917612345678
017612345678
17612345678

我注意到用于测试的iPhone 6 plus和iOS 11.1将来电号码显示为0176 12345678

我也尝试了以下内容:

  • 重置手机上的所有设置
  • 从设备中删除应用
  • 使用主应用程序的方案从Xcode运行应用程序
  • 使用扩展程序
  • 再次运行应用程序
  • 在要求选择应用的对话框中选择我的主应用

尽管如此,号码识别不起作用。我甚至不确定应用程序扩展是否已执行,因为我无法使用断点进行调试,并且我已添加用于测试的NSLog条目未出现在控制台中。

我在这里缺少一个重要的步骤吗?

1 个答案:

答案 0 :(得分:0)

通过分机提供的电话号码必须始终以国家/地区的拨号代码为前缀(在您的情况下为49)。如果传入手机的号码为0176 12345678,您可能应该尝试使用49017612345678(注意零)。