NSURL 和 iPhone SDK 3.0 拨打电话的问题

Posted

技术标签:

【中文标题】NSURL 和 iPhone SDK 3.0 拨打电话的问题【英文标题】:Issues with NSURL and iPhone SDK 3.0 for placing phone calls 【发布时间】:2009-06-24 23:27:59 【问题描述】:

iPhone 3.0 SDK 有一个新引入的问题,以及它如何处理自动拨打电话的 NSURL 方法。过去你可以调用一个方法(NSURL),传入一个带有 URL 前缀(tel://、sms 等)的字符串,然后 iPhone 操作系统会将消息发送到设备,例如 iTunes , App Store, Phone, SMS, Mail, Safari, etc... 代码如下:

[openURL:[NSURL URLWithString:@"tel://8005551212"]];  

当调用该方法时,电话会自动拨打。在 iPhone OS 3.0 中调用该方法时,应用会弹出一个对话框,要求确认通话。这破坏了几个现有的应用程序以及我们刚刚推入 App Store 以供审查的一个应用程序。

谁能想出解决这个问题的办法?我目前不知道该怎么做,并试图决定用什么其他方法来处理这个正在开发的新扳手。

我 blogged 对此提出了建议,并建议人们联系 Apple 并让他们了解此问题。我还推荐了一个我和朋友正在考虑的修复方法——那就是使用与位置感知应用程序相同的“授权”;应用知道它的位置感知并询问用户是否可以使用他们的位置。

同样,如果有人对此问题有解决方案(并且在 iPhone SDK 的范围内,不会被 Apple 拒绝),请告诉我;我将不胜感激。

更新:Julian Romero Nieto 对该错误进行了很好的描述,并引用了(更新的)Apple 文档并显示了当前的问题。您可以阅读他在 Oper Radar here 上的帖子。

【问题讨论】:

所以您是说确认对话框“破坏”了应用程序?我不确定我是怎么理解的。如果用户点击同意正确,它还在拨号吗? @sif 我可能在我的消息中混淆了呼叫是自动发出的,而不是确认继续;如第二段第一行所述。问题是检查标准的应用程序,例如侦听音频然后呼叫预定义号码的安全应用程序将不再呼叫该号码,因为现在弹出模式确认对话框,等待确认放置电话打电话。 【参考方案1】:

我相信这是一项安全功能 - 想象一个应用程序在每天凌晨 3 点拨打 900 号码 10 分钟。如果您将其与新的“应用内购买”API 进行比较 - 大致相同。

位置 API 比较是一个不好的例子 - 获取用户位置是一个隐私问题,而不是财务问题。

【讨论】:

是和不是。我可以看到您如何定位安全问题,这是一个有效的观点,但是在您启动应用程序时使用“服务确认”,这不会成为问题。而且我敢肯定,如果有人放入您提到的应用程序(1-900 应用程序),那么苹果不仅会拉动该应用程序,还会拉动开发人员的帐户。我已经向 Apple 提出了错误请求(作为增强功能),并联系了其他各种开发人员来做同样的事情。我还联系了 iPhone Core 团队的一些人,以了解他们对这个问题的反应。像这样购买的所有应用程序都坏了。 :(【参考方案2】:

您无法解决此问题,因为这是预期的 - 您为“解决”该问题所做的任何事情都将导致应用无法获得批准。

当应用可以在未经用户同意的情况下选择拨打号码时,用户体验会被认为不好。软件可能会拨打“高级”号码,这会在用户没有意识到的情况下花费大量金钱。

这是所有移动软件平台和操作系统的标准 - 如果它只是在 OS 3.0 中更改,那么这表明它一定是最初 Apple 认为可以解决的问题。但是我认为移动运营商会经常向 Apple 施加压力,要求其引入这一点,然后最终不得不向用户退款——但他们已经将钱支付给了“高级”号码。

我不确定美国是否像欧洲一样存在“优质”数字,这也许是难以理解的原因。

【讨论】:

@Grouchal:很有趣,很像 Chaos 提出的答案,但同样,不太对。据我所知,这不是问题,我浏览了媒体,找不到应用程序自动拨打(如您所说的高级)号码的案例,给用户留下了巨额电话费。这更多的是处理方法(用于拨打电话)的处理方式的变化。我没有看到运营商在这个问题上向苹果施加压力,而是内部“修复”。在与 Apple 交谈时,他们建议通过 Bug Reporter 提交“增强”;博客文章中的链接。 祝你战斗顺利!也许一旦你明天与 Apple 一起获胜,你就可以在周一与诺基亚和其他公司较量。 我刚刚更新了条目并添加了 Julian Romero Nieto 对错误的描述和他对(更新的)Apple 文档的引用,并显示了手头的问题。您可以通过上面的链接阅读他的帖子。【参考方案3】:

tel:// 的 RFC 规定不允许通过 tel: 方案自动拨号。

因此他们必须在 RFC 合规性和破坏这几个应用程序之间做出选择。

我希望选择忽略 RFC,至少允许应用在允许的情况下继续拨号。

【讨论】:

【参考方案4】:

我质疑 Apple 是否有意推动用户购买新 iPhone,如果他们想要语音拨号 - 这个问题会破坏所有 3rd 方语音拨号应用程序,使其不安全且基本上无用。

让我们继续向 Apple 施加压力,使其成为用户可配置的设置。

【讨论】:

【参考方案5】:

也许您的意思是新引入的功能而不是问题?

我认为您不会让 Apple 删除确认弹出窗口,尤其是在符合 RFC 的情况下。

关于损坏应用的 Lemmy 引用 Joel (http://www.joelonsoftware.com/items/2009/06/10c.html):

一个好的平台总是有 应用程序的机会 不仅仅是填补空白。这些是 供应商的应用程序类型 不太可能考虑核心 特征,通常是因为它是垂直的 - 这不是每个人都会去做的事情 想要。机会完全为零 苹果将​​永远添加一个 iPhone 为牙医提供的功能。 零。

我不希望某些应用程序在未经我同意的情况下拨打电话、发送短信甚至连接到互联网(生活在一个未来无限移动数据计划仍遥不可及的国家/地区)。

当客户抱怨账单上的未知电话时,肯定是接线员头疼。

【讨论】:

以上是关于NSURL 和 iPhone SDK 3.0 拨打电话的问题的主要内容,如果未能解决你的问题,请参考以下文章

iPhone - 在 3.0 和 4.0 操作系统/SDK 上播放视频?

MAP 与 iPhone 3.0 SDK 一起使用都有哪些限制?

iPhone SDK 3.0 针对 2.2.1 SDK

在iPhone 3.0 SDK中改变了渐变技巧?

为 iPhone 4 SDK 构建的 Blocks 在部署到 iPhone OS 3.0 时可以工作吗?

在 iPhone 3.0 SDK 中为 MoviePlayer 添加自定义控件