从 iPhone 的来电中获取呼叫者 phone 的号码
Get the callers phone number from an incoming call on iPhone
我正在尝试在来电时获取来电显示(phone 号码)。
TrueCaller 已经实现了这一点,他们获得了 phone 来电号码。
我找到了以下信息:
1. CoreTelephony Framework(只给出调用状态)
2. Apple 9.0 更新:"Maybe" 联系人同步。使用邮件应用程序并检测传入的 phone 号码。
非越狱设备无法显示来电显示。
不过有一种方法,你可以知道是哪个用户打来的,但不确定对你是否有用。
如果您有连接到 iPhone 的蓝牙设备,它将收到所有通知,包括来电,然后您可以获得来电显示。
除此之外,目前根本没有其他方法可以知道被叫ID。
###编辑###
iOS 10岁以上:
使用Callkit,看看呼叫目录扩展
根据文档,
识别来电者
当 phone 接到来电时,系统首先会查询用户的联系人以找到匹配的 phone 号码。如果未找到匹配项,系统会查询您应用程序的呼叫目录扩展以找到匹配的条目来识别 phone 号码。这对于维护与系统联系人分开的用户联系人列表的应用程序(例如社交网络)或识别可能从应用程序内发起的来电(例如客户服务支持或送货通知)非常有用.
例如,考虑一个用户在社交网络应用中与 Jane 成为朋友,但她的联系人中没有她的 phone 号码。社交网络应用程序有一个呼叫目录扩展,它下载并添加用户所有朋友的 phone 号码。因此,当用户接到 Jane 的来电时,系统会显示类似“(应用程序名称)来电显示:Jane Appleseed”的内容,而不是“未知来电者”。
要提供有关来电者的识别信息,您可以在 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()
}
}
由于该方法只在系统启动app extension时调用,而不是每次调用都调用,所以必须一次性指定调用标识信息;例如,您不能向 Web 服务发出请求以查找有关来电的信息。
iOS 9 及更早版本:
正如 Kakshil 所提到的,来电显示在非越狱设备上是不可能的。
我会给你一些关于真实呼叫者如何工作的发现,
它不是在读取通话记录,他们实际上创建了 Action
extension,无论你尝试分享联系人,它都会显示
truecaller 应用程序扩展,编码用于显示联系人
从他们的服务器获取的详细信息
您可能还会对少数人收到的推送通知感到困惑
打电话,说
"Some X calls you"。这就是 truecaller 使用技巧的地方。如果你
清楚地注意到,只有在
您接到安装了 truecaller 的 android 用户的电话。让
我给你详细解释一下,
X(android 用户安装了 truecaller),调用 Y(ios 用户安装了 truecaller),android 版本通知服务器 X 调用 Y。并且服务器将向 Y 的 iPhone.
发送推送通知
我正在尝试在来电时获取来电显示(phone 号码)。 TrueCaller 已经实现了这一点,他们获得了 phone 来电号码。
我找到了以下信息: 1. CoreTelephony Framework(只给出调用状态) 2. Apple 9.0 更新:"Maybe" 联系人同步。使用邮件应用程序并检测传入的 phone 号码。
非越狱设备无法显示来电显示。
不过有一种方法,你可以知道是哪个用户打来的,但不确定对你是否有用。
如果您有连接到 iPhone 的蓝牙设备,它将收到所有通知,包括来电,然后您可以获得来电显示。
除此之外,目前根本没有其他方法可以知道被叫ID。
###编辑###
iOS 10岁以上:
使用Callkit,看看呼叫目录扩展
根据文档,
识别来电者
当 phone 接到来电时,系统首先会查询用户的联系人以找到匹配的 phone 号码。如果未找到匹配项,系统会查询您应用程序的呼叫目录扩展以找到匹配的条目来识别 phone 号码。这对于维护与系统联系人分开的用户联系人列表的应用程序(例如社交网络)或识别可能从应用程序内发起的来电(例如客户服务支持或送货通知)非常有用.
例如,考虑一个用户在社交网络应用中与 Jane 成为朋友,但她的联系人中没有她的 phone 号码。社交网络应用程序有一个呼叫目录扩展,它下载并添加用户所有朋友的 phone 号码。因此,当用户接到 Jane 的来电时,系统会显示类似“(应用程序名称)来电显示:Jane Appleseed”的内容,而不是“未知来电者”。
要提供有关来电者的识别信息,您可以在 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()
}
}
由于该方法只在系统启动app extension时调用,而不是每次调用都调用,所以必须一次性指定调用标识信息;例如,您不能向 Web 服务发出请求以查找有关来电的信息。
iOS 9 及更早版本:
正如 Kakshil 所提到的,来电显示在非越狱设备上是不可能的。
我会给你一些关于真实呼叫者如何工作的发现,
它不是在读取通话记录,他们实际上创建了 Action extension,无论你尝试分享联系人,它都会显示 truecaller 应用程序扩展,编码用于显示联系人 从他们的服务器获取的详细信息
您可能还会对少数人收到的推送通知感到困惑 打电话,说 "Some X calls you"。这就是 truecaller 使用技巧的地方。如果你 清楚地注意到,只有在 您接到安装了 truecaller 的 android 用户的电话。让 我给你详细解释一下,
X(android 用户安装了 truecaller),调用 Y(ios 用户安装了 truecaller),android 版本通知服务器 X 调用 Y。并且服务器将向 Y 的 iPhone.
发送推送通知