iOS Swift: 能否用CallKit屏蔽一些特定国家的来电?

问题描述 投票:1回答:1

我想阻止来自特定国家的电话,这些电话每天打八次,让我很不爽。我想创建一个应用程序,允许阻止任何特定分机号码(例如+33法国,+212摩洛哥,+973巴林,等等...)。

我添加了CallKit,我遵循了一个 教程 我试过了,但似乎我连一个简单的数字都无法阻止......。

private func addAllBlockingPhoneNumbers(to context: CXCallDirectoryExtensionContext) {
        print("1234")
        let phoneNumbers: [CXCallDirectoryPhoneNumber] = [ 1234 ]
        for phoneNumber in phoneNumbers {
          context.addBlockingEntry(withNextSequentialPhoneNumber: phoneNumber)
        }
      }

      private func addOrRemoveIncrementalBlockingPhoneNumbers(to context: CXCallDirectoryExtensionContext) {
        print("1234")
        // Retrieve any changes to the set of phone numbers to block from data store. For optimal performance and memory usage when there are many phone numbers,
        // consider only loading a subset of numbers at a given time and using autorelease pool(s) to release objects allocated during each batch of numbers which are loaded.
        let phoneNumbersToAdd: [CXCallDirectoryPhoneNumber] = [ 1234 ]
        for phoneNumber in phoneNumbersToAdd {
          context.addBlockingEntry(withNextSequentialPhoneNumber: phoneNumber)
        }

        let phoneNumbersToRemove: [CXCallDirectoryPhoneNumber] = [ 1234 ]
        for phoneNumber in phoneNumbersToRemove {
          context.removeBlockingEntry(withPhoneNumber: phoneNumber)
        }

        // Record the most-recently loaded set of blocking entries in data store for the next incremental load...
      }

有什么办法吗?

ios swift callkit callblocking
1个回答
1
投票

使用CallKit,你可以创建一个应用程序分机,称为呼叫目录应用程序分机。苹果首先会检查来电号码是否在系统或用户的屏蔽列表中被屏蔽,然后检查你的应用程序的目录的屏蔽列表。

在这里的页面底部会有深入的解释。https:/developer.apple.comdocumentationcallkit?language=objc。

屏蔽来电

当手机收到来电时,系统首先会查询用户的拦截列表,以确定是否应该拦截来电。如果电话号码不在用户或系统定义的拦截列表中,系统就会查询您的应用程序的呼叫目录分机,以找到匹配的拦截号码。这对于那些维护已知律师数据库或允许用户屏蔽符合一组标准的任何号码的应用程序来说非常有用。

要阻止特定电话号码的来电,您可以使用 beginRequestWithExtensionContext:实现中的 addBlockingEntryWithNextSequentialPhoneNumber:方法。

注释

您可以指定您的呼叫目录应用程序分机在其实现的beginRequestWithExtensionContext:中添加标识和或阻止电话号码。

@interface CustomCallDirectoryProvider: CXCallDirectoryProvider
@end

@implementation CustomCallDirectoryProvider
- (void)beginRequestWithExtensionContext:(NSExtensionContext *)context {
    NSArray<NSNumber *> *blockedPhoneNumbers.sorted = @[ … ];
     for (NSNumber *phoneNumber in [blockedPhoneNumbers.sorted sortedArrayUsingSelector:@selector(compare:)]) {
        [context addBlockingEntryWithNextSequentialPhoneNumber:(CXCallDirectoryPhoneNumber)[phoneNumber unsignedLongLongValue]];
     }

    [context completeRequestWithCompletionHandler:nil];
}
@end
© www.soinside.com 2019 - 2024. All rights reserved.