2017-11-20 10 views
0

저는 조직 내 모든 연락처 세부 정보를 저장하는 앱을 개발 중입니다. 주요 목표는 내 앱이 수신 또는 발신 통화를 감지해야하며 해당 번호가 속한 사람이 누구인지 표시해야합니다. 예를 들어,이 응용 프로그램은 Truecaller 응용 프로그램으로 작동합니다.IOS에서 알 수없는 GSM 통화 식별

나는 인터넷 검색을 시도하고 IOS에서 수신 전화 번호를 감지하는 것이 불가능하다는 것을 알았습니다.

ios에서 CallKit에 대해 읽었으며 Call Directory 확장에 대해 알게되었습니다. 비록 그것을 구현하는 방법에 대한 명확한 아이디어가 없다하더라도 & 나는이 문제가 내 문제에 대한 해결책이 될지 전혀 모른다.

IOS 장치가 알 수없는 번호에서 전화를 받으면 시스템에서 내 응용 프로그램을 선택하고 알 수없는 번호의 연락처를 검색하여 호출자 화면에 관련 정보를 표시합니까? 아니면 다른 방법이 있습니까?

+0

CallKit 설명서에 직접 관련 섹션이 있습니다. https://developer.apple.com/documentation/callkit을 참조하십시오. – Sulthan

+0

예, CallKit을 통해 호출자 인증을 구현해야합니다. – Paulw11

+0

을 통해 iOS에 이름과 번호를 등록하는 확장 프로그램을 작성해야합니다. 희망을 보내 주셔서 감사합니다. 내가 추천할만한 자료가 있니? –

답변

0

몇 가지 불면의 밤 이후, 나는 내 문제에 대한 해결책을 발견했습니다. 엑스 코드에서

  1. , 고토 파일 -> 새로 만들기 -> 대상 enter image description here

  2. 통화를 선택 디렉토리 확장 및 클릭 한 다음

enter image description here

  1. 이름을 입력하고 마침을 클릭하십시오. enter image description here

  2. 이제 앱이 enter image description here

고토 CallDirectoryExtension.swift에 유사 지금이

import Foundation 
import CallKit 
class CallDirectoryHandler: CXCallDirectoryProvider { 
override func beginRequest(with context: CXCallDirectoryExtensionContext) { 
    guard let phoneNumbersToBlock = retrievePhoneNumbersToBlock() else { 
     NSLog("Unable to retrieve phone numbers to block") 
     let error = NSError(domain: "CallDirectoryHandler", code: 1, userInfo: nil) 
     context.cancelRequest(withError: error) 
     return 
    } 

    for phoneNumber in phoneNumbersToBlock { 
     context.addBlockingEntry(withNextSequentialPhoneNumber: CXCallDirectoryPhoneNumber(phoneNumber)!) 
    } 

    guard let (phoneNumbersToIdentify, phoneNumberIdentificationLabels) = retrievePhoneNumbersToIdentifyAndLabels() else { 
     NSLog("Unable to retrieve phone numbers to identify and their labels") 
     let error = NSError(domain: "CallDirectoryHandler", code: 2, userInfo: nil) 
     context.cancelRequest(withError: error) 
     return 
    } 

    for (phoneNumber, label) in zip(phoneNumbersToIdentify, phoneNumberIdentificationLabels) { 
     context.addIdentificationEntry(withNextSequentialPhoneNumber: CXCallDirectoryPhoneNumber(phoneNumber)!, label: label) 
    } 

    context.completeRequest { (suc) in 
     print(suc) 
    } 
} 

private func retrievePhoneNumbersToBlock() -> [String]? { 
    // retrieve list of phone numbers to block 
    return ["+8612345678901","+8618180100980"] 
} 

private func retrievePhoneNumbersToIdentifyAndLabels() -> (phoneNumbers: [String], labels: [String])? { 
    // retrieve list of phone numbers to identify, and their labels 
    return (["+94123456789", "+94234567891"], 
      ["John Doe","Angelina Jollie",]) 
} 

} 

하여 응용 프로그램을 실행하고 실행에 코드를 교체해야합니다. 그런 다음 설정 -> 전화 -> 통화 차단 & 식별로 이동 한 다음 권한을 켭니다.

참고 : CallDirectoryHandler에서 연락처 목록을 변경 한 경우 먼저 권한을 해제하고 장치에서 응용 프로그램을 제거해야합니다.

귀하의 목록을 업데이트 할 때마다 앱을 디버깅 할 때마다 단계를 다시 실행하십시오.

+0

통화 차단 및 식별이 해제되지 않습니다. 앱에서 제공 한 데이터가 유효하지 않습니다. – Aashish1aug

+0

번호 목록을 확인하십시오. 오름차순이어야합니다. –