美文网首页
iOS使用Call Directory Extension实现来

iOS使用Call Directory Extension实现来

作者: One77_dcfc | 来源:发表于2018-11-27 11:43 被阅读89次

最近项目中需要增加一个新的需求,来电身份识别.之前没有做过相关功能的开发.因此在网上搜索资料查到了一个关键的东西叫Call Directory Extension.

Call Directory Extension.jpg
先看一张最终效果图
15.jpg

在开发过程中我主要参考了这篇文章:iOS用CallKit实现来电识别、来电拦截
文章中有实现的方法,以及demo可供下载.
在此感谢原作者.
而我主要是分享一下我在开发中遇到的一些问题供大家参考.以及原文中没有提及的一些东西做一下补充.

注:本文实现的方式为读取本地csv文件写入APP Groups共享空间.并在Call Directory Extension, 并在- (void)addAllIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context;中读取APP Groups存储的文件.
具体创建Call Directory Extension的方法原文中有提及,在这里我就不赘述了.但需要注意一点Call Directory Extensiontarget的工程的命名规则.
举个例子主工程名字 com.company.test
那么你的Call Directory Extension的名字应为 com.company.test.xxxxxx
(xxxxxx为可替换的名字)

另需注意:Call Directory Extension的工程也需要在apple developer开发者网站注册 app id 与创建相关的生产与测试配置文件.

APP Groups

创建
APP Groups.jpg
1.前往Apple Developer创建APP Groups

命名方式为group.com.company.test(以上面为例)
其中group为系统添加的标识不可删除与更改.后面的com.company.test可随意更改.但一般都是以组织+工程的方式命名,方便管理.

(注:以下操作两个app ids都需要)

2.创建主工程与Call Directory Extension工程的App IDs.在创建过程中需要勾选APP Groups APP Groups.jpg

创建完你会发现APP Groups不可用.别方,正常现象.

APP Groups.jpg
点击下面的edit进入编辑 5.jpg 6.jpg 7.jpg

到这里就已经开启了app groups的权限了(再次注意:主工程与Call Directory Extension的工程都要设置2.操作)还需要配置相应的Provisioning Profiles并下载到本地.

3.在工程中的设置如下


8.jpg 9.jpg

到此就已经配置完了

遇到的一些问题

当你在设置中开启身份识别权限或者在主工程中调用 - (void)reloadExtensionWithIdentifier:(NSString *)identifier completionHandler:(nullable void (^)(NSError *_Nullable error))completion;系统将自动调用下面这个方法

- (void)beginRequestWithExtensionContext:(CXCallDirectoryExtensionContext *)context {
    context.delegate = self;
    // Check whether this is an "incremental" data request. If so, only provide the set of phone number blocking
    // and identification entries which have been added or removed since the last time this extension's data was loaded.
    // But the extension must still be prepared to provide the full set of data at any time, so add all blocking
    // and identification phone numbers if the request is not incremental.
    if (@available(iOS 11.0, *)) {
        if (context.isIncremental) {
            [self addOrRemoveIncrementalBlockingPhoneNumbersToContext:context];
            
            [self addOrRemoveIncrementalIdentificationPhoneNumbersToContext:context];
        } else {
            [self addAllBlockingPhoneNumbersToContext:context];
            
            [self addAllIdentificationPhoneNumbersToContext:context];
        }
    } else {
        // Fallback on earlier versions
    }
    
    [context completeRequestWithCompletionHandler:nil];
}

身份识别主要用到的方法是[self addAllIdentificationPhoneNumbersToContext:context];
我在开发中遇到的问题就是当我在主工程中调用reloadExtensionWithIdentifier:而在这边的if (context.isIncremental) 判断为是并没有走else的分支.所以导致我的数据并没有写入进去.
被这个问题困扰了很久.在网上搜索也没有找到关于context.isIncremental的说法.无奈只能修改为if (!context.isIncremental)..如果有大神知道原因可以补充一下这里.

另附:如何调试Call Directory Extension的方法
在测试的时候请将读取本地文件和调用reloadExtensionWithIdentifier:的代码写到一个按钮里面..即让他变成可控的.点一下就调用一次..后面会讲为何这样做..

1.首先将你的主工程运行在真机上 机上 上~~~~~

10.jpg
2. 14.jpeg

去设置->电话->来电身份识别开启权限
然后点击一次之前设置的调用写入方法的按钮

3之后在点击这个 11.jpg

设置完之后再点击一次之前的按钮就可以开始调试了


12.jpg

欢迎随时交流,如果有写的不对的地方希望大家帮忙改正.
注各位一切顺利!!

相关文章

  • iOS使用Call Directory Extension实现来

    最近项目中需要增加一个新的需求,来电身份识别.之前没有做过相关功能的开发.因此在网上搜索资料查到了一个关键的东西叫...

  • iOS Call Directory Extension 实现来

    在iOS10之后,苹果开放了CallKit这个框架,该框架允许语音或者视讯电话的开发者讲UI界面整合到iPhone...

  • CallKit

    创建一个call项目 Call Directory Extension创建成功后,会发现多了下面几个文件: Cal...

  • iOS来电号码识别

    Demo 一、创建一个新的target 选择Call Directory Extension 选中主程序YSCal...

  • iOS10 CallKit 之来电识别功能

    先导入 Call Directory Extension 导入完成后,项目会多了一个文件夹文件夹里的文件是Call...

  • call,apply,bind详解

    一、call 可以让call()中的对象调用当前对象所拥有的function。你可以使用call()来实现继承:写...

  • category与extension

    category与extension 转载iOS实现多继承的几种方式 转载

  • iOS extension app 问题总结

    iOS extension app 问题总结 欢迎大家关注我的博客 extension app 中使用 主项目中文...

  • Please define "EXTENSION_IO

    使用maxleap出错,Please define "EXTENSION_IOS" in "your_extens...

  • Java多线程基础补充

    使用Callable接口和FutureTask来创建线程 创建Callable的实现类,实现call方法,可以直接...

网友评论

      本文标题:iOS使用Call Directory Extension实现来

      本文链接:https://www.haomeiwen.com/subject/wiiwqqtx.html