티스토리 뷰

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
링크