iPhone应用程序是否有权在没有用户交互的情况下拨打电话?


9

我刚才读到一个有关未接来电的骗局,即使用户不回电,也要向其收费。在我看来,恶意的iPhone应用程序可能会拨打溢价电话,以骗取用户钱财-实际上,这似乎是过去发生的事情

根据Apple自己的文档

当用户点击网页中的电话链接时,iOS会显示警报,询问用户是否真的要拨打电话号码,并在用户接受时启动拨号。当用户在本机应用程序中使用tel方案打开URL时,iOS不会显示警报,并且会在不进一步提示用户的情况下启动拨号。

在我看来,貌似良性的iPhone应用程序可以说,等到手机被充电后(因此用户可能没有来接听),然后拨打溢价率电话,向开发人员收取可观的奖金。在iOS中似乎没有任何权限,我可以更改以阻止此行为,因为这是使用URL打开电话应用程序,而不是访问任何电话数据。

谁能确认我的理解是正确的,如果是,为什么苹果在地球上没有填补如此巨大的漏洞?

Answers:


8

我通过尝试从我的一个应用程序发起电话来实验性地检查了iOS行为。

结果如下:

  • 可以以编程方式启动电话而无需用户确认。我刚刚编写了一行代码,该代码在应用程序加载后立即执行。这意味着,如果您的应用程序位于前台,它甚至可以在不需要用户轻按任何位置的情况下随时启动呼叫。
  • 我已向应用程序发送了无提示的远程推送通知,以便在未运行时唤醒应用程序,然后执行相同的代码。没有通话开始;如果该应用程序在后台运行,则iOS不允许该应用程序发起电话。

因此,回答问题是在不引起用户注意的情况下启动电话的唯一方法是通过某种方式说服用户让恶意应用程序在前台运行,然后再启动电话,因为iOS不允许此操作如果应用程序是后台的。

当前,iOS没有提供任何机制来阻止来自特定应用程序的电话呼叫,但是只有在该应用程序处于前台时,它才会发生。


感谢您的全面调查,出色的回答。我很高兴听到它只是在前台,尽管我忍不住但认为发明一个可能会无人值守的应用并不太困难,并且在前台-延时摄影的应用是事物类型的好例子。我仍然希望在其他应用程序中打开URL是打开的每个其他应用程序的权限-刚刚确认每个外部应用程序都是第一次,而不是每次都确认。但是,我确实接受具有用户体验的含义。我想每个人都必须保持警惕。
Cartroo '16

5

我做了一个测试应用程序来检查这一点。应用tel://123456789只能在前台且处于活动状态时才能打开URL 。即使在进入后台状态后立即调用此代码,打开此URL的API也没有执行任何操作。因此,回答您的问题-应用程序将无法在您不知情的情况下拨打电话。

要对此进行测试,请将其粘贴到您的AppDelegate

- (void)applicationDidEnterBackground:(UIApplication *)application {
   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456789"]];
}

很好的答案,感谢您的代码。如果我可以接受两个答案,我会的。
Cartroo '16

2

当尝试在iOS> = 10.3上发起呼叫时,将始终向用户显示一个弹出窗口。文件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.