CallKit使用

打開 “項目->Capabilities”蛛蒙,找到App Groups的數(shù)據(jù)欄1、創(chuàng)建一個名為ckphone的項目如下:

2 、

2.1、“File->new->target->Call Directory Extension”創(chuàng)建名為testCallKit的Extension target,輸入名稱,然后點擊激活兰迫。

2.2信殊、然后生成的項目結(jié)構(gòu)如下

3、在容器App中創(chuàng)建共享文件去APP groups

3.1汁果、打開 “項目->Capabilities”涡拘,找到App Groups的數(shù)據(jù)欄打開共享區(qū)

3.2、新增共享區(qū)“group.ckphone.app”

3.3据德、檢查是否具備訪問系統(tǒng)的權(quán)限

//檢查是否獲得電話? 來電阻止和身份識別的系統(tǒng)權(quán)限

- (void)checkpermission {

CXCallDirectoryManager *manager = [CXCallDirectoryManager sharedInstance];

// 獲取權(quán)限狀態(tài)

[manager getEnabledStatusForExtensionWithIdentifier:@"ETelExchangeForiphone.zongjifuwuCallKitNew" completionHandler:^(CXCallDirectoryEnabledStatus enabledStatus, NSError * _Nullable error) {

NSString *title = nil;

if (!error) {

if (enabledStatus == CXCallDirectoryEnabledStatusDisabled) {

/*

CXCallDirectoryEnabledStatusUnknown = 0,

CXCallDirectoryEnabledStatusDisabled = 1,

CXCallDirectoryEnabledStatusEnabled = 2,

*/

title = @"來電彈屏功能未授權(quán)鳄乏,請在'設(shè)置'->'電話'->'來電阻止與身份識別'中授權(quán)";

}else if (enabledStatus == CXCallDirectoryEnabledStatusEnabled) {

title = @"來電彈屏功能已授權(quán)";

}else if (enabledStatus == CXCallDirectoryEnabledStatusUnknown) {

title = @"未知錯誤";

}

}else{

title = @"有錯誤";

}

[CVAlertTool showTip:title onView:self.navigationController.view];

}];

}

3.4、打開權(quán)限

3.5棘利、將數(shù)據(jù)更新到共享區(qū)橱野,并且觸發(fā)到CallKit擴(kuò)展讀取數(shù)據(jù)

- (BOOL)saveCallKitData {

NSString *name = _nameLabel.text;

NSString *phone = [NSString stringWithFormat:@"86%@", _phoneLabel.text ];

if([name isEqualToString:@""]){

return NO;

}

if([phone isEqualToString:@"86"]){

return NO;

}

NSDictionary *data = @{

@"name" : name,

@"phone" : phone

};

NSError *err = nil;

NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.ckphone.app"];

containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/callKitData"];

[containerURL removeAllCachedResourceValues];

BOOL result = [data writeToURL:containerURL atomically:YES];

if (!result) {

[CVAlertTool showTip:@"數(shù)據(jù)保存失敗善玫!" onView:self.navigationController.view];

} else {

[CVAlertTool showTip:@"數(shù)據(jù)保存成功水援!" onView:self.navigationController.view];

[self updateCallKitData];

}

return result;

}

- (void)updateCallKitData{

CXCallDirectoryManager *manager = [CXCallDirectoryManager sharedInstance];

[manager reloadExtensionWithIdentifier:@"com.demo.ckphone.PhoneCallKit" completionHandler:^(NSError * _Nullable error) {

NSString *message;

if (error == nil) {

message = @"彈屏數(shù)據(jù)更新成功";

}else{

message = @"彈屏數(shù)據(jù)更新失敗";

}

[CVAlertTool showTip:message onView:self.navigationController.view];

}];

}

3.6、CallKit中編寫讀取代碼

- (BOOL)addIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {

//file讀取

NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.ckphone.app"];

containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/callKitData"];

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfURL:containerURL];

NSString *name = [dict objectForKey:@"name"];

NSString *phone = [dict objectForKey:@"phone"];

CXCallDirectoryPhoneNumber phoneNum = [phone longLongValue];

[context addIdentificationEntryWithNextSequentialPhoneNumber:phoneNum label:name];

return YES;

}

4茅郎、運行過程以及結(jié)果

4.1蜗元、輸入身份識別信息和電話號碼,點擊“來電提示”系冗。

4.2奕扣、如果沒有權(quán)限則到電話設(shè)置中賦權(quán)

4.3、回到應(yīng)用界面再次點擊“來電提示”掌敬,然后撥打電話惯豆,隨后進(jìn)入系統(tǒng)的通話記錄界面,來電提示效果如下:

??注意:應(yīng)用中幾個需要注意的地方

1奔害、電話號碼寫入共享區(qū)的格式遵循以下規(guī)則

1.1循帐、固話號碼:86+區(qū)號(去除第一個0)+電話號碼,例如 01012345678 寫入應(yīng)該是 861012345678

1.2舀武、手機(jī)號碼:86+手機(jī)號碼拄养,例如18100000000寫入應(yīng)該是8618100000000

2、如果寫入大量的電話號碼的時候,號碼數(shù)組必須遵循加上86后的升序排列

文中的demo應(yīng)用地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瘪匿,一起剝皮案震驚了整個濱河市跛梗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌棋弥,老刑警劉巖核偿,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異顽染,居然都是意外死亡漾岳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門粉寞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尼荆,“玉大人,你說我怎么就攤上這事唧垦⊥比澹” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵振亮,是天一觀的道長巧还。 經(jīng)常有香客問我,道長坊秸,這世上最難降的妖魔是什么麸祷? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮褒搔,結(jié)果婚禮上摇锋,老公的妹妹穿的比我還像新娘。我一直安慰自己站超,他們只是感情好荸恕,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著死相,像睡著了一般融求。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上算撮,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天生宛,我揣著相機(jī)與錄音,去河邊找鬼肮柜。 笑死陷舅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的审洞。 我是一名探鬼主播莱睁,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仰剿?” 一聲冷哼從身側(cè)響起创淡,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎南吮,沒想到半個月后琳彩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡部凑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年露乏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涂邀。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡瘟仿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出必孤,到底是詐尸還是另有隱情,我是刑警寧澤瑞躺,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布敷搪,位于F島的核電站,受9級特大地震影響幢哨,放射性物質(zhì)發(fā)生泄漏赡勘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一捞镰、第九天 我趴在偏房一處隱蔽的房頂上張望闸与。 院中可真熱鬧,春花似錦岸售、人聲如沸践樱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春恼策,著一層夾襖步出監(jiān)牢的瞬間咽块,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工腻惠, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留环肘,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓集灌,卻偏偏與公主長得像悔雹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容