簡體   English   中英

從iPhone上的來電獲取呼叫者的電話號碼

[英]Get the callers phone number from an incoming call on iPhone

我正在嘗試在來電時獲取來電顯示(電話號碼)。 TrueCaller已實現此功能,並且他們獲得了傳入呼叫者的電話號碼。

我發現了以下信息:1. CoreTelephony框架(僅提供呼叫狀態)2.蘋果9.0更新:“也許”聯系人同步。 郵件應用程序並檢測傳入的電話號碼。

###編輯###

iOS 10及更高版本:

使用Callkit ,看看呼叫目錄擴展

根據文檔,

識別來電者

當電話接收到來電時,系統首先會咨詢用戶的聯系人以查找匹配的電話號碼。 如果找不到匹配項,則系統將查詢您應用的“呼叫目錄”擴展名以找到匹配項以標識電話號碼。 這對於維護與系統聯系人分開的用戶的聯系人列表(例如社交網絡)的應用程序,或用於識別可能從應用程序內部發起的來電的應用程序(例如客戶服務支持或交付通知)很有用。

例如,假設某個用戶與某個社交網絡應用程序中的Jane成為朋友,但聯系人中沒有她的電話號碼。 社交網絡應用程序具有“呼叫目錄擴展”,可以下載並添加所有用戶朋友的電話號碼。 因此,當用戶收到來自Jane的來電時,系統將顯示類似“((應用程序名稱)Caller ID:Jane Appleseed”)而不是“ Unknown Caller”。

要提供有關傳入呼叫者的標識信息,請在beginRequest(with :)的實現中使用addIdentificationEntry(withNextSequentialPhoneNumber:label :)方法。

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()
    }
}

由於僅在系統啟動應用程序擴展時才調用此方法,而不是針對每個單獨的調用才調用此方法,因此您必須一次指定所有的呼叫標識信息。 例如,您無法向Web服務發出請求以查找有關來電的信息。

iOS 9及更早版本:

正如Kakshil提到的, 在沒有越獄的設備上無法使用來電顯示。

我會給您一些有關真正呼叫者如何工作的發現,

  1. 他們實際上沒有創建通話記錄,而是創建了Action擴展程序 ,無論您在何處嘗試共享聯系人,它都會顯示truecaller應用程序擴展程序,其編碼用於顯示從其服務器獲取的聯系人詳細信息

  2. 您可能還會對收到幾個電話的推送通知感到困惑,說“有人X打電話給您”。 這就是truecaller使用的技巧。 如果您清楚地注意到,則只有當您從安裝了truecaller的android用戶那里接到電話時,才會收到該推送通知。 我來詳細解釋一下

X(安裝了truecaller的android用戶),調用Y(安裝了truecaller的ios用戶),android版本會通知服務器X向Y發出了呼叫。服務器會將推送通知發送到Y的iPhone。

非越獄設備上無法使用來電顯示。

但是,有一種方法可以讓您知道哪個用戶正在呼叫,但不確定是否對您有用。

如果您有連接到iPhone的藍牙設備,它將獲取所有通知,包括來電,然后您可以獲取其來電顯示。

除此之外,目前根本沒有其他方法可以知道被叫ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM