티스토리 뷰
CallKit 을 json 을 읽어와서 업데이트하는 방식에 대해서 공유하겠습니다.
1. 3개 이상의 데이터를 CallDirectory에 업데이트하는 방법
CalDirectory.swift의 addIdentificationEntry(_) 에 등록하는데 있어서 3개 이상 등록하는데 이슈를 쉽게 발견할 수 있습니다.
1) 3개 이상 수신자 확인 데이터 등록
2) 설정 > 전화 > 전화 차단 및 ID 진입
3) 해당앱 On 시도
위의 방식으로 수행 시 무한 로딩 화면 또는 "알림" 메시지로 "개발자에게 문의하세요." 라는 문구가 나옵니다.
해결 방안으로 두 가지 대안을 생각하였습니다.
1) 쓰레드로 별도로 돌려야 하는가?
2) 데이터 넣을 때 마다 1초 딜레이를 주고 넣어야하는가?
위 두가지 방안을 시도하였으나 문제는 해결되지 않았습니다.
Apple Developer 통해서 Custom 으로 동작하는 방식에 대해서 친절히 적혀있는 글을 발견했습니다.
1 2 3 4 5 6 7 8 9 10 | class CustomCallDirectoryProvider: CXCallDirectoryProvider { override func beginRequest(with context: CXCallDirectoryExtensionContext) { let labelsKeyedByPhoneNumber: [CXCallDirectoryPhoneNumber: String] = [ … ] for (phoneNumber, label) in labelsKeyedByPhoneNumber.sorted(by: <) { context.addIdentificationEntry(withNextSequentialPhoneNumber: phoneNumber, label: label) } context.completeRequest() } |
labelsKeyedByPhoneNumber.sorted(by: <)
sorted을 해서 넣어주는 방식으로 3개 이상의 데이터를 넣을 수 있었습니다.
2. Json 파일을 읽어서 업데이트 하는 방법
현재 CallDirectiryExtension 은 AppDelegate와 별도의 폴더로 구성되어서 Json 파일 또한 CallDirectiryExtension 폴더 안에 넣어야 합니다.
1) 사용자가 작성한 Json 파일을 CallDirectiryExtension 폴더에 넣습니다.
// PhonDBData.json
[
{
"phoneNumber":"8211111111",
"name":"Type_1"
},
{
"phoneNumber":"8200000000",
"name":"Type_2"
},
{
"phoneNumber":"8233333333",
"name":"Type_3"
},
{
"phoneNumber":"8244444444",
"name":"Type_4"
}
]
2) CallDirectoryXX.swift에 있는 addIdentificationPhoneNumbers(_ CXCallDirectoryExtensionContext) 에서 json File을 가져옵니다.
3) 가져온 json file을 labelsKeyedByPhoneNumber: [CXCallDirectoryPhoneNumber: String] 형태로 저장합니다.
1 2 3 4 5 6 | var labelsKeyedByPhoneNumber: [CXCallDirectoryPhoneNumber: String] = [ : ] for data in dbData { labelsKeyedByPhoneNumber[CXCallDirectoryPhoneNumber.init(data.phoneNumber)!] = data.name.replace(target: "_", withString: " ") } | cs |
4) 저장한 labelsKeyedByPhoneNumber을 addIdentificationEntry 에 저장하여 데이터를 업로드 합니다.
1 2 3 | for (phoneNumber, label) in labelsKeyedByPhoneNumber.sorted(by: <) { context.addIdentificationEntry(withNextSequentialPhoneNumber: phoneNumber, label: label) } | cs |
지금까지 설명한 소스는 Github 에 올렸습니다.
정리
CallKit을 사용하는 방식에 대해서 공유 하였습니다. 이 방식의 문제점은 업데이트 된 내용이 있을 때 마다 json을 로컬에 저장하여 새로 배포하는 문제가 있습니다. 데이터 업로드 방식이 local json 이 아닌 방식에 대해서 다음 포스트에서 공유 하겠습니다.
[Swift4] CallKit 구현 (수신자 확인) [1/3]
[Swift4] CallKit 구현 (수신자 확인) [3/3]
참고
https://developer.apple.com/documentation/callkit
'프로그래밍 > iOS' 카테고리의 다른 글
[SWIFT] LOCAL JSON FILE 호출하기 (0) | 2017.12.29 |
---|---|
[SWIFT] CallKit 구현 (수신자 확인) [3/3] (2) | 2017.12.29 |
[SWIFT] CallKit 구현 (수신자 확인) [1/3] (2) | 2017.12.29 |
[SWIFT] DatePickerView 스크롤 시 다른 기능 방지 (0) | 2017.12.22 |
[SWIFT] 로그인 모듈 구성 [3/3] - 페이스북 로그인 (0) | 2017.12.20 |
- DI
- Android
- 패턴
- flutter
- MCC
- 선교
- 고시문헬퍼
- Android Studio
- 탁구
- IOS
- 안드로이드
- 디자인패턴
- 임용고시
- 미션차이나센터
- 스코어헬퍼
- missioon
- 고시문
- push
- issue
- missionchina
- Kotlin
- view
- swift
- 코틀린
- 점수판
- 알고리즘
- IT
- RXjava
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |