如何使用呼叫目录扩展来识别我的应用程序中的来电?

How to use call directory extension to identify a incoming call in my application?

我正在研究 callKit 框架,我发现通过使用呼叫目录扩展,我们可以识别来电 phone 号码。我的问题是如何在 iOS 应用程序中实施呼叫目录扩展以识别来电详细信息。我在 Objective C.

工作

让一个号码"+919876xxxxx"使用此方法添加到呼叫目录扩展中:

- (BOOL)addIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {
    // Numbers must be provided in numerically ascending order.
    CXCallDirectoryPhoneNumber phoneNumbers[] = {+919876xxxxx};

    NSArray<NSString *> *labels = @[ @"Telemarketer"];
    NSUInteger count = (sizeof(phoneNumbers) / sizeof(CXCallDirectoryPhoneNumber));

    for (NSUInteger i = 0; i < count; i += 1) {
        CXCallDirectoryPhoneNumber phoneNumber = phoneNumbers[i];
        NSString *label = labels[i];
        [context addIdentificationEntryWithNextSequentialPhoneNumber:phoneNumber label:label];
    }
    return YES;
}

还有我在phone设置中关于来电拦截和识别功能。 当我用这个号码打电话时,它显示 [App name] Caller ID: Telemarketer.

我的问题是如何在我的申请中知道这个数字,以便我在 table 中显示这个数字。

提前致谢。

如果这个问题不是怎么写电话簿分机,而是怎么获取来电号码,我觉得是问题所在,那就不可能了。

来电时不涉及电话簿分机。它所做的只是注册存储在 SQL 应用程序私有的内部 SQL 数据库中的号码。当有来电时,呼叫目录分机不会得到 运行,因此它和您的应用程序无法识别来电号码,这与以往一样,没有改变在 iOS 10.

在 iOS10 中添加了用于 Voip 应用程序的呼叫检测的新功能,但如果您不是 voip 应用程序,您仍然无法获取来电(或去电)的号码。

首先您需要在应用程序设置中启用您的 CallBlocker 应用程序 为此,请遵循此 -

Go to Settings->Phone->Call blocking & identification->Enable your App.

之后使用addIdentificationEntry添加条目

  private func addIdentificationPhoneNumbers(to context: CXCallDirectoryExtensionContext) throws {

        let phoneNumbers: [CXCallDirectoryPhoneNumber] = [ 18775555555, +919899999999 ]
        let labels = [ "Telemarketer", "Local business" ]

        for (phoneNumber, label) in zip(phoneNumbers, labels) {
            context.addIdentificationEntry(withNextSequentialPhoneNumber: phoneNumber, label: label)
        }
    }

在 Xcode 8.x swift 3.x

中工作正常