是否有人知道有可能以及如何通过官方SDK / Cocoa Touch 通过编程方式从发送SMSiPhone
呢?
tools->script editor
在POST请求中使用MailApp.sendEmail
api将电子邮件发送到电话号码。我想(全部免费)是att是YOURNUMBER @ mms.att.net,tmobile是YOURNUMBER@tmomail.net
是否有人知道有可能以及如何通过官方SDK / Cocoa Touch 通过编程方式从发送SMSiPhone
呢?
tools->script editor
在POST请求中使用MailApp.sendEmail
api将电子邮件发送到电话号码。我想(全部免费)是att是YOURNUMBER @ mms.att.net,tmobile是YOURNUMBER@tmomail.net
Answers:
如果您可以在iPhone上的程序中发送短信,则可以编写在后台向用户发送垃圾邮件的游戏。我敢肯定,您真的想收到您的朋友的垃圾邮件,“尝试这个新游戏!它使我的boxxers陷入僵局,您的也将成为垃圾邮件!roxxersboxxers.com !!!!如果立即注册,您将获得3,200 RB点!!”
Apple对自动(甚至部分自动)的SMS和拨号操作有限制。(想象一下,如果游戏改为在一天的特定时间拨打911)
最好的选择是在Internet上设置使用在线SMS发送服务的中间服务器,如果需要完全自动化,则通过该路由发送SMS。(即,iPhone上的程序将UDP数据包发送到服务器,服务器将发送真实的SMS)
但是,iOS 4现在提供了viewController
可以导入到您的应用程序中的功能。您预先填充了SMS字段,然后用户可以在控制器内启动SMS发送。不同于使用“短信:......” URL格式,这使得你的应用程序保持开放,并允许您来填充既要和身体各个领域。您甚至可以指定多个收件人。
这样可以防止应用程序在用户未明确知道的情况下发送自动SMS。您仍然无法从iPhone本身发送全自动SMS,它需要一些用户交互。但这至少允许您填充所有内容,并避免关闭应用程序。
该MFMessageComposeViewController类是有据可查的,和教程显示它是多么容易实现。
iOS 5包括用于iPod touch和iPad设备的消息传递,因此尽管我自己尚未对此进行测试,但可能是所有iOS设备都将能够通过MFMessageComposeViewController发送SMS。如果是这种情况,则Apple正在运行SMS服务器,该服务器代表没有蜂窝调制解调器的设备发送消息。
此类无变化。
现在,您可以检查所使用的消息媒体是否接受主题或附件,以及接受的附件类型。您可以在主题允许的地方编辑主题并在邮件中添加附件。
此类无变化。
此类无变化。
此类无变化。
请记住,此功能不适用于没有iOS 4的手机,并且不能在iPod touch或iPad上运行,除非在iOS 5下使用。您必须先检测设备和iOS限制,然后才能使用此功能控制器,否则可能会将您的应用限制为最近升级的3G,3GS和4台iPhone。
但是,发送SMS的中间服务器将允许所有这些iOS设备中的任何一个都可以访问Internet,只要它们具有Internet访问权限,因此对于许多应用程序来说,它仍然是更好的解决方案。或者,同时使用两者,并且仅在设备不支持该服务时才退回到在线SMS服务。
这是一个完全可以满足您需求的教程:MFMessageComposeViewController
。
http://blog.mugunthkumar.com/coding/iphone-tutorial-how-to-send-in-app-sms/
实质上:
MFMessageComposeViewController *controller = [[[MFMessageComposeViewController alloc] init] autorelease];
if([MFMessageComposeViewController canSendText])
{
controller.body = @"SMS message here";
controller.recipients = [NSArray arrayWithObjects:@"1(234)567-8910", nil];
controller.messageComposeDelegate = self;
[self presentModalViewController:controller animated:YES];
}
以及指向文档的链接。
https://developer.apple.com/documentation/messageui/mfmessagecomposeviewcontroller
MFMessageComposeViewController *controller = ...
if块放入其中。(类方法无需具有实例即可进行测试)
http://blog.mugunthkumar.com/coding/iphone-tutorial-how-to-send-in-app-sms/
在我的笔记本电脑上显示“ 502 Bad Gateway”。也许链接断开了。
#import <MessageUI/MessageUI.h>
在您的头文件中包含MFMessageComposeViewControllerDelegate
,UINavigationControllerDelegate
IBAction
方法中声明MFMessageComposeViewController
say的实例messageInstance
[MFMessageComposeViewController canSendText]
在if条件下发送短信,它将返回“是/否”在这种if
情况下,请执行以下操作:
首先为您设置身体messageInstance
:
messageInstance.body = @"Hello from Shah";
然后将邮件的收件人确定为:
messageInstance.recipients = [NSArray arrayWithObjects:@"12345678", @"87654321", nil];
将您的messageInstance的委托设置为:
messageInstance.messageComposeDelegate = self;
在最后一行中:
[self presentModalViewController:messageInstance animated:YES];
presentModalViewController:animated:
已弃用;使用presentViewController:animated:completion:
代替。另外,- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
如果您想知道结果,请记住定义委托方法。
您可以使用sms:[target phone number]
URL打开SMS应用程序,但是没有关于如何用文本预填充SMS正文的指示。
XPC是MacOS中进程间通信的系统之一。此系统层已开发出来,用于基于使用libSystem的plist结构的传输进行进程间通信,并已启动。实际上,它是一个界面,允许通过交换字典等结构来管理流程。由于遗传原因,iOS 5也具有此机制。
您可能已经了解了此介绍的意思。是的,iOS中有一些系统服务,其中包括用于XPC通信的工具。我想用一个用于发送SMS的守护程序来举例说明该工作。但是,应该指出的是,此功能在iOS 6中已修复,但与iOS 5.0-5.1.1有关。无需使用越狱,专用框架和其他非法工具即可对其进行开发。仅需要目录/ usr / include / xpc / *中的头文件集。
在iOS中发送SMS的元素之一是系统服务com.apple.chatkit,其任务包括生成,管理和发送短文本消息。为了便于控制,它具有公共可用的通信端口com.apple.chatkit.clientcomposeserver.xpc。使用XPC子系统,您可以在未经用户批准的情况下生成和发送消息。
好吧,让我们尝试创建一个连接。
xpc_connection_t myConnection;
dispatch_queue_t queue = dispatch_queue_create("com.apple.chatkit.clientcomposeserver.xpc", DISPATCH_QUEUE_CONCURRENT);
myConnection = xpc_connection_create_mach_service("com.apple.chatkit.clientcomposeserver.xpc", queue, XPC_CONNECTION_MACH_SERVICE_PRIVILEGED);
现在,我们将XPC连接myConnection设置为SMS发送服务。但是,XPC配置可以创建挂起的连接-我们需要采取进一步的步骤来进行激活。
xpc_connection_set_event_handler(myConnection, ^(xpc_object_t event){
xpc_type_t xtype = xpc_get_type(event);
if(XPC_TYPE_ERROR == xtype)
{
NSLog(@"XPC sandbox connection error: %s\n", xpc_dictionary_get_string(event, XPC_ERROR_KEY_DESCRIPTION));
}
// Always set an event handler. More on this later.
NSLog(@"Received a message event!");
});
xpc_connection_resume(myConnection);
连接已激活。此时此刻,iOS 6将在电话日志中显示一条消息,指示禁止这种通信。现在,我们需要生成一个类似于xpc_dictionary的字典,其中包含消息发送所需的数据。
NSArray *recipient = [NSArray arrayWithObjects:@"+7 (90*) 000-00-00", nil];
NSData *ser_rec = [NSPropertyListSerialization dataWithPropertyList:recipient format:200 options:0 error:NULL];
xpc_object_t mydict = xpc_dictionary_create(0, 0, 0);
xpc_dictionary_set_int64(mydict, "message-type", 0);
xpc_dictionary_set_data(mydict, "recipients", [ser_rec bytes], [ser_rec length]);
xpc_dictionary_set_string(mydict, "text", "hello from your application!");
所剩无几:将消息发送到XPC端口并确保已传递。
xpc_connection_send_message(myConnection, mydict);
xpc_connection_send_barrier(myConnection, ^{
NSLog(@"The message has been successfully delivered");
});
就这样。短信已发送。
添加MessageUI.Framework并使用以下代码
#import <MessageUI/MessageUI.h>
然后:
if ([MFMessageComposeViewController canSendText]) {
MFMessageComposeViewController *messageComposer =
[[MFMessageComposeViewController alloc] init];
NSString *message = @"Your Message here";
[messageComposer setBody:message];
messageComposer.messageComposeDelegate = self;
[self presentViewController:messageComposer animated:YES completion:nil];
}
和委托方法-
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller
didFinishWithResult:(MessageComposeResult)result {
[self dismissViewControllerAnimated:YES completion:nil];
}
您可以使用这种方法:
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:MobileNumber"]]
iOS将自动从您的应用程序导航到消息应用程序的消息撰写页面。由于URL的方案以sms:开头,因此将其标识为消息应用程序识别并启动的类型。
//Add the Framework in .h file
#import <MessageUI/MessageUI.h>
#import <MessageUI/MFMailComposeViewController.h>
//Set the delegate methods
UIViewController<UINavigationControllerDelegate,MFMessageComposeViewControllerDelegate>
//add the below code in .m file
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
MFMessageComposeViewController *controller =
[[[MFMessageComposeViewController alloc] init] autorelease];
if([MFMessageComposeViewController canSendText])
{
NSString *str= @"Hello";
controller.body = str;
controller.recipients = [NSArray arrayWithObjects:
@"", nil];
controller.delegate = self;
[self presentModalViewController:controller animated:YES];
}
}
- (void)messageComposeViewController:
(MFMessageComposeViewController *)controller
didFinishWithResult:(MessageComposeResult)result
{
switch (result)
{
case MessageComposeResultCancelled:
NSLog(@"Cancelled");
break;
case MessageComposeResultFailed:
NSLog(@"Failed");
break;
case MessageComposeResultSent:
break;
default:
break;
}
[self dismissModalViewControllerAnimated:YES];
}
请遵循以下步骤
1。添加MessageUI.Framework
到项目
2。进口#import <MessageUI/MessageUI.h>
.h文件。
3。复制此代码以发送消息
if ([MFMessageComposeViewController canSendText]) {
MFMessageComposeViewController *messageComposer =
[[MFMessageComposeViewController alloc] init];
NSString *message = @"Message!!!";
[messageComposer setBody:message];
messageComposer.messageComposeDelegate = self;
[self presentViewController:messageComposer animated:YES completion:nil];
}
4。delegate
如果需要,实施方法。
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
///your stuff here
[self dismissViewControllerAnimated:YES completion:nil];
}
奔跑吧!
[self dismissViewControllerAnimated:YES completion:nil];
在messageComposeViewController: didFinishWithResult:
回调方法中运行。否则它会挂在那里。
这是在iOS中发送短信的Swift版本代码。请注意,它仅适用于真实设备。在iOS 7以上版本中测试过的代码。您可以在这里阅读更多内容。
1)创建一个继承MFMessageComposeViewControllerDelegate和NSObject的新类:
import Foundation
import MessageUI
class MessageComposer: NSObject, MFMessageComposeViewControllerDelegate {
// A wrapper function to indicate whether or not a text message can be sent from the user's device
func canSendText() -> Bool {
return MFMessageComposeViewController.canSendText()
}
// Configures and returns a MFMessageComposeViewController instance
func configuredMessageComposeViewController(textMessageRecipients:[String] ,textBody body:String) -> MFMessageComposeViewController {
let messageComposeVC = MFMessageComposeViewController()
messageComposeVC.messageComposeDelegate = self // Make sure to set this property to self, so that the controller can be dismissed!
messageComposeVC.recipients = textMessageRecipients
messageComposeVC.body = body
return messageComposeVC
}
// MFMessageComposeViewControllerDelegate callback - dismisses the view controller when the user is finished with it
func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult) {
controller.dismissViewControllerAnimated(true, completion: nil)
}
}
2)如何使用此类:
func openMessageComposerHelper(sender:AnyObject ,withIndexPath indexPath: NSIndexPath) {
var recipients = [String]()
//modify your recipients here
if (messageComposer.canSendText()) {
println("can send text")
// Obtain a configured MFMessageComposeViewController
let body = Utility.createInvitationMessageText()
let messageComposeVC = messageComposer.configuredMessageComposeViewController(recipients, textBody: body)
// Present the configured MFMessageComposeViewController instance
// Note that the dismissal of the VC will be handled by the messageComposer instance,
// since it implements the appropriate delegate call-back
presentViewController(messageComposeVC, animated: true, completion: nil)
} else {
// Let the user know if his/her device isn't able to send text messages
self.displayAlerViewWithTitle("Cannot Send Text Message", andMessage: "Your device is not able to send text messages.")
}
}
iOS 4中有一个类,支持从您的应用程序发送带有正文和配方的消息。它的工作原理与发送邮件相同。您可以在此处找到文档:链接文本
- (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients
{
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
UIImage *ui =resultimg.image;
pasteboard.image = ui;
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:"]];
}
//带有名称和号码的调用方法。
-(void)openMessageViewWithName:(NSString*)contactName withPhone:(NSString *)phone{
CTTelephonyNetworkInfo *networkInfo=[[CTTelephonyNetworkInfo alloc]init];
CTCarrier *carrier=networkInfo.subscriberCellularProvider;
NSString *Countrycode = carrier.isoCountryCode;
if ([Countrycode length]>0) //Check If Sim Inserted
{
[self sendSMS:msg recipientList:[NSMutableArray arrayWithObject:phone]];
}
else
{
[AlertHelper showAlert:@"Message" withMessage:@"No sim card inserted"];
}
}
//发送消息的方法
- (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSMutableArray *)recipients{
MFMessageComposeViewController *controller1 = [[MFMessageComposeViewController alloc] init] ;
controller1 = [[MFMessageComposeViewController alloc] init] ;
if([MFMessageComposeViewController canSendText])
{
controller1.body = bodyOfMessage;
controller1.recipients = recipients;
controller1.messageComposeDelegate = self;
[self presentViewController:controller1 animated:YES completion:Nil];
}
}
如果需要,可以使用CoreTelephony
称为CTMessageCenter
class 的私有框架。有几种发送短信的方法。
用这个:
- (void)showSMSPicker
{
Class messageClass = (NSClassFromString(@"MFMessageComposeViewController"));
if (messageClass != nil) {
// Check whether the current device is configured for sending SMS messages
if ([messageClass canSendText]) {
[self displaySMSComposerSheet];
}
}
}
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
//feedbackMsg.hidden = NO;
// Notifies users about errors associated with the interface
switch (result)
{
case MessageComposeResultCancelled:
{
UIAlertView *alert1 = [[UIAlertView alloc] initWithTitle:@"Message" message:@"SMS sending canceled!!!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert1 show];
[alert1 release];
}
// feedbackMsg.text = @"Result: SMS sending canceled";
break;
case MessageComposeResultSent:
{
UIAlertView *alert2 = [[UIAlertView alloc] initWithTitle:@"Message" message:@"SMS sent!!!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert2 show];
[alert2 release];
}
// feedbackMsg.text = @"Result: SMS sent";
break;
case MessageComposeResultFailed:
{
UIAlertView *alert3 = [[UIAlertView alloc] initWithTitle:@"Message" message:@"SMS sending failed!!!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert3 show];
[alert3 release];
}
// feedbackMsg.text = @"Result: SMS sending failed";
break;
default:
{
UIAlertView *alert4 = [[UIAlertView alloc] initWithTitle:@"Message" message:@"SMS not sent!!!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert4 show];
[alert4 release];
}
// feedbackMsg.text = @"Result: SMS not sent";
break;
}
[self dismissModalViewControllerAnimated: YES];
}
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:number"]]
这将是最好,最短的方法。
您可以显示MFMessageComposeViewController,它可以发送SMS,但带有用户提示(他点击发送按钮)。未经用户许可,无法执行此操作。在iOS 11上,您可以进行扩展,就像对传入消息进行过滤一样,告诉iOS是否为垃圾邮件。短信无能为力