如何使用私有 API 阻止 iOS 应用程序中的来电?
Posted
技术标签:
【中文标题】如何使用私有 API 阻止 iOS 应用程序中的来电?【英文标题】:How can I use private APIs to block incoming calls in an iOS application? 【发布时间】:2011-11-11 16:25:32 【问题描述】:我希望能够在我正在编写的 ios 应用程序中选择性地阻止来电。这是供个人使用的,而不是 App Store,所以我可以使用私有 API 来完成此操作。
我最近遇到了 Core Telephony 框架。有没有办法使用这个框架来阻止调用?如果没有,我可以使用哪些私有 API 来执行此操作?
【问题讨论】:
【参考方案1】:你确定不是吗? http://tech.ruimaninfo.com/?p=83 上的代码示例显示了如何执行此类操作。 SDK 中的核心电话标头不完整。 当然这意味着没有应用商店 这是基于我链接的示例的代码片段
if ([str1 isEqualToString:@"kCTCallIdentificationChangeNotification"])
NSDictionary *info = (__bridge NSDictionary *)userInfo;
CTCall2 *call = (__bridge CTCall *)[info objectForKey:@"kCTCall"];
NSString *caller = CTCallCopyAddress(NULL, call);
NSLog(@"Caller %@",caller);
if ([caller isEqualToString:@"+1555665753"])
//disconnect this call
CTCallDisconnect(call);
需要额外的定义:
typedef struct __CTCall CTCall;
extern NSString *CTCallCopyAddress(void*, CTCall *);
extern void CTCallDisconnect(CTCall*);
并且您需要监控电话中心的回叫(参见链接示例) 我在我的 iOS5 设备上测试了这个片段
【讨论】:
不,我不能把它放在 App Store 上,但是我如何使用该链接阻止特定号码? 还没有,我没有看到任何变化:/ 尼斯。老实说,我认为您在接下来的几个月中至少获得 10 票赞成,因为该代码非常有用!最后一件事,我将如何保持应用程序运行,以便在我接到电话时调用您发布的代码,即使应用程序已关闭? 严格来说你不能——苹果规则。但是看看***.com/questions/4656214/… 和***.com/questions/7610182/… 可以给你一些想法。我遇到的一件事-您最好保持 CoreLocation 处于活动状态,而不是处于重要位置监控模式(即使精度为 3 公里),否则您可能会被终止得太快。当然你必须测量电池使用问题(毕竟你使用CoreLocation)等 你确定吗?我知道 iBlacklist 和 MCaller 就是这样做的,但他们有电话 JB'ed。你确定没有办法吗?【参考方案2】:Core Telephony 不支持此功能。据我所知,任何已知的私有 API 也无法做到这一点。
【讨论】:
那iBlackList和MCaller是怎么做的呢? @H2CO3,我在哪里说“不可能”? @GregMartin “据我所知,任何已知的私有 API 也无法做到这一点。” @H2CO3,我不相信这两个陈述是平等的。我还想知道为什么它对一个已有 1.5 年历史且答案已被接受的问题很重要。【参考方案3】:从 iOS 10.0+ 开始,就有了 CallKit,其中包括一个呼叫阻止和识别 API:https://developer.apple.com/documentation/callkit
(为 2020 年或未来发现此内容的人提供的信息)
【讨论】:
以上是关于如何使用私有 API 阻止 iOS 应用程序中的来电?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 iOS 私有 api 二进制文件中获取标头和函数?如何对应用程序进行逆向工程?