티스토리 뷰
CallKit 이 공개되면서 약간 나아졌지만 답이 없다
왜 070 모두 막는 앱이 없고, 010 스팸 주소 대부분 막을 수 없나 했는데
iOS API 때문이다
iOS 12 에서 앱은 전화번호를 직접 받을 수 없고, 처리할 수 도 없다
할 수 있는 건,
context.addIdentificationEntry // 전화 받는 UI에 텍스트 나 이모지 한줄 추가
context.addBlockingEntry // 전화 온지도 모르게 차단
참고로 addBlockingEntry 에 추가하면, 고객님이 전화를 받을 수 없다고 상대방에 알려준다
저 2개를 추가해놓은, CXCallDirectoryProvider 확장을 구현해놓으면,
iOS 에서 임의로 (?) 해당 함수를 포함한 beginRequest 를 호출해서 항목을 로드한다
임의로 라고 위에는 적었지만 언제인지 모르겠다. 앱 삭제 재설치 해도 갱신이 안되서,
앱 시작시, 아래 명령으로 갱신되게 하였다.
CXCallDirectoryManager.sharedInstance.reloadExtension
머 하여간,
결국 모든 spam 번호를 넣을 수 밖에 없는데
문제는, block 할 수 있는 숫자가 제한적이다.
070-****-****
대충 1억개를 넣어야하는데, reloadExtension 의 콜백으로 몇초뒤
Domain=com.apple.CallKit.error.calldirectorymanager Code=5
제한된 숫자이상 넣었다고 올라왔다.
// https://agonictise.tistory.com/10
// Domain=com.apple.CallKit.error.calldirectorymanager Code=5
/*
let maxBlockedNumbers: Int64 = 1_0000_0000;
let countryCode:Int64 = 82 * 1_00_0000_0000
let ars:Int64 = 70 * 1_0000_0000
for count in 0..<maxBlockedNumbers {
let number = countryCode + ars + count
context.addBlockingEntry(withNextSequentialPhoneNumber: number)
}
아래는 동일한 번호 넣으면 발생하는 로그, 결국 db 에 넣는 거 같다
"NSLocalizedDescription" : "sqlite3_step for query \'INSERT INTO PhoneNumberBlockingEntry (extension_id, phone_number_id) VALUES (?, (SELECT id FROM PhoneNumber WHERE (number = ?)))\' returned 19 (2067) errorMessage \'UNIQUE constraint failed: PhoneNumberBlockingEntry.extension_id, PhoneNumberBlockingEntry.phone_number_id\'"
이 때문에, 후후던가, OpenCallkit 등은
앞자리 4자리를 주면 뒷자리 1개를 막는 방법을 취한다
https://www.facebook.com/whowhocompany/posts/2253647434695148
https://github.com/chrisballinger/OpenCallBlock
let maxBlockedNumbers: Int64 = 1_0000;
let countryCode:Int64 = 82 * 1_00_0000_0000
var ars70 = [4768, 7739, 7740, 7741, 7077, 7665]
ars70.sort()
for head in ars70 {
for count in 0..<maxBlockedNumbers {
let head_digit: Int64 = Int64(head) * 1_0000 + 70 * 1_0000_0000
let number = countryCode + head_digit + count
context.addBlockingEntry(withNextSequentialPhoneNumber: number)
}
}
한 1년간 받은 스팸을 볼 때,
070 spam은 비교적 앞자리는 같고 뒷자리만 변했다,
010 spam은 랜덤한 번호를 가진다
010은 스팸 db 가 꽤 쓸만하지 않다면, 막기가 거의 힘들다
- Total
- Today
- Yesterday