以编程方式发送短信,无需打开短信撰写窗口

15
直到昨天,我认为在不使用IOS短信界面的情况下发送后台SMS是不可能的(这也是许多人在这里确认的)。但是,今天我下载了一个名为SmartSender的新应用程序,它可以安排您的SMS,然后自动发送。
我测试了一下,实际上并未在后台发送SMS,而是出现了本地通知,当您单击它将应用程序带到前台时,SMS会自动发送。
如何实现这一点?
也许是因为界面非常清楚地说明了您正在做什么以及您正在发送什么,所以苹果批准了该应用程序,但是如何在不显示界面的情况下发送SMS呢?
更新:预定的SMS出现在我的手机消息应用程序中,因此我认为它们没有使用其他服务发送SMS,接收者电话号码表明SMS是从我的手机发送的。
更新2:好吧,我正在使用并观看应用程序执行此操作,因此IT IS POSSIBLE无需显示默认界面,我不是在问是否可以完成。我已关闭所有互联网连接并使用我的手机发送消息,因此它出现在消息应用程序中。因此,该应用程序不使用任何第三方服务。
更新3:我将接受自己的答案,事实上这是不可能的;然而,在回答问题时确实是可能的。所涉及的应用程序现在已在其描述中指定不适用于iOS 6,因此我认为苹果修补了一些可以利用以实现此功能的错误。

1
他们不是在使用自己的短信网关吗? - MrTJ
他们必须使用自己的短信网关来实现这一点,一旦短信发送成功,他们会向用户发送通知。但是没有其他办法。除非你不打算通过应用商店分发你的应用程序。 - Raphael Ayres
1
@RaphaelAyres,请阅读我的编辑。 - htafoya
@htafoya:请参考我的答案。它一定会对你有所帮助。 - Parth Bhatt
你使用的是哪个SDK版本? - Raphael Ayres
6个回答

7
我试用了这个应用程序,可以证实它确实可以编程方式发送短信,而不显示短信界面。很明显,它并不是通过第三方服务发送的,因为在可能的情况下,消息会作为iMessage发送。
从所有其他答案中也可以清楚地看出,没有公共API可以编程方式发送短信,因此开发人员必须使用私有API,但仍然成功地通过了批准过程。
具体来说,他似乎使用了CoreTelephony API。 这篇SO帖子描述了该过程。显然,您还需要在某个地方获取CoreTelephony头文件。

-1 是因为你在这个帖子上随意扣分,并且 CTMessageCenter sendSMSWithText 是一个私有 API。如果你读了其他人的回复,就会发现所有用户都在谈论第三方或未记录的 API 或基于 Web 的短信,而你却回应了一个未记录的方法??关于 CTMessageCenter 没有文档:http://goo.gl/GWp85 - elp
15
这位用户想知道 SmartSender 如何以编程方式发送短信。如果你实际使用过该应用程序,你就会知道它确实可以以编程方式发送短信。其他答案都没有做到这一点,这就是为什么我对它们进行了反对投票的原因。我的引用私有 API 是无关紧要的。这位用户想知道如何以编程方式发送短信,并且没有其他方法。很抱歉你感到需要对我的回答进行反对投票只是因为你感到不满意,但这并不是 downvotes 的意义。希望你将来可以更加成熟,根据价值观而非个人情感进行投票。 - yuji

5
我已经研究了几天关于iOS上的短信发送/接收限制,使用的是iOS 6和XCode 4.5(截至撰写本文最新版本)。我对这个SmartSender应用程序很感兴趣,所以我购买了它。
我不知道这是否仅适用于iOS 6,但我得到了标准消息控制器(MFMessageComposeViewController)来发送消息。我尝试过延迟发送-在指定时间获取消息控制器并手动单击发送。 我也尝试了即时发送-弹出控制器,我还必须手动单击发送。 如果我点击取消按钮,则应用程序实际上会将我循环回消息控制器(除非我杀死应用程序,否则无法取消!)
因此,这确实允许从自定义UI输入消息,但然后消息本身被复制到MFMessageComposeViewController中,并且这就是发送短信的内容。 因此,App Store批准了该应用程序,但与我们所有人所期望的完全不同!

好的,谢谢你的评论。也许这是在IOS 5上的一个错误,现在在IOS 6上已经修复了。 - htafoya

4

1
该应用程序未使用任何第三方服务,可在无互联网连接的情况下运行,并且消息是由我的手机发送的,就像它们出现在消息应用程序中一样。 - htafoya
我尝试了OP提到的应用程序,它确实可以在后台发送短信。 - yuji
@WildFire,我正在尝试使用Twilio实现后台发送短信功能,那么当我提交审核时,苹果会批准吗?你有什么想法吗? - Bhavin Kansagara
@Manish 看起来我们可以从后端发送短信,但是是否可能直接从客户端(iOS应用程序)发送短信?我找不到任何相关文档。 - jayant rawat

3

事实上,这是不可能的;然而,在回答问题时是可以的。

这个应用现在在其描述中指定了它不适用于IOS 6,因此我认为苹果修补了一些可以被利用来实现此功能的漏洞。


2
您可以使用:

[[UIApplication sharedApplication] openURL: @"sms:+3912345678"];

模拟器上无法运行...并且你不能编程发送短信!

在iOS < 6上测试通过。


1
这个不再可用。苹果已经移除了对此的支持,以避免短信垃圾信息和发送未经请求的短信。 - Raphael Ayres
我尝试了OP提到的应用程序,并且确实可以在后台发送短信。 - yuji
短信应用程序在模拟器中不可用,也没有应用程序处理此URL,因此在模拟器中无法工作。但是,在设备上,如果有一个消息应用程序来处理此URL,则它将正常工作(如上所述,在iOS-6中无法工作)。 - Yogesh Maheshwari

0

无法通过编程方式发送短信。您可能需要调查第三方服务,如Twilio,以发送短信。


谢谢,但我正在使用该应用程序,并在没有互联网连接的情况下观看它工作,而且不显示默认界面。 - htafoya
我尝试了OP提到的应用程序,它确实可以在后台发送短信。如果适用的话,甚至会将其作为iMessage发送,因此明显是在设备上而不是第三方服务上发生的。 - yuji

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接