是否有人知道这是可能的,以及如何以编程方式从iPhone
发送短信,与官方的SDK /可可触摸?
如果你可以发送在iPhone程序中的短信,你就可以写游戏,垃圾邮件的人的背景。我敢肯定,你真的想从垃圾邮件您的朋友,“试用这款新游戏!它roxxers我boxxers,和你将太!roxxersboxxers.com !!!!如果你现在注册,你会得到3200 RB点!”
苹果拥有自动化(甚至部分自动)短信和拨号操作的限制。 (试想一下,如果游戏,而不是在一天中的特定时间拨打911)
最好的办法是建立一个中间服务器,它使用一个网上短信发送服务,并通过该路由发送短信,如果你需要完整的自动化在互联网上。 (即你的iPhone上的程序发送一个UDP包,您的服务器,这将真正SMS)
iOS 4的,但是,现在提供了一个viewController
你可以导入到你的应用程序。您预填充短信字段,然后用户可以启动SMS控制器内发送。不同于使用“短信:......” URL格式,这使得你的应用程序保持开放,并允许您来填充两个到和正文字段。你甚至可以指定多个收件人。
这可防止应用程序发送短信自动未经用户明确地意识到这一点。你仍然不能从iPhone本身发送完全自动化的短信,它需要一些用户交互。但是,这至少可以让你来填充的一切,并避免关闭应用程序。
该MFMessageComposeViewController类是有据可查的,和tutorials显示它是多么容易实现。
iOS 5的包括iPod touch和iPad设备的消息,因此,虽然我还没有测试此我自己,它可能是所有iOS设备将能够通过MFMessageComposeViewController发送短信。如果是这样的话,那么苹果正在运行代表不具有蜂窝调制解调器的设备发送消息的SMS服务器。
没有改变这一类。
现在,您可以检查是否正在使用的消息,媒体将接受一个主题或附件,以及什么样的附件就会接受。您可以编辑主题和添加附件的消息,该媒体允许它。
没有改变这一类。
没有改变这一类。
没有改变这一类。
No significant changes to this class
请记住,这不是没有iOS 4的手机上运行,并在iPod touch或iPad同样采用此之前,它不会工作,除非,也许,的iOS 5下必须要么检测设备和iOS限制控制器,或风险限制您的应用程序最近升级3G,3GS,4个iPhone手机。
然而,发送短信的中间服务器将允许任何和所有的iOS设备,只要他们上网发送短信,所以它可能仍然是许多应用的更好的解决方案。或者,同时使用,并且只回落到一个网上短信服务时,该设备不支持它。
这里是斯威夫特版本的代码中的iOS发送短信。请注意的是,它只能在实际设备。代码中的iOS 7+测试。你可以阅读更多here。
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的一类,它支持从您的应用程序发送带有身体和收件人的邮件。它的工作原理相同,发送邮件。你可以在这里找到的文档:qazxsw POI
//调用方法与姓名和号码。
- (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
- (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];
}
这将是做最好的和短的路。
你可以提出MFMessageComposeViewController,可以发送短信,但用户提示(他轻拍发送按钮)。没有办法做到这一点,而无需用户的权限。在iOS上11,你可以扩展,可以像过滤传入的消息,告诉的iOS无论是它的垃圾邮件。没有更多的短信不能做
你需要的,如果你想显示创建和你自己的应用程序将消息发送到使用MFMessageComposeViewController。
否则,你可以使用sharedApplication方法。
这里是一个不正是你正在寻找一个教程: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
#import <MessageUI/MessageUI.h>
MFMessageComposeViewControllerDelegate
&UINavigationControllerDelegate
IBAction
方法声明实例的MFMessageComposeViewController
说messageInstance
[MFMessageComposeViewController canSendText]
如果条件下,它会返回是/否if
条件做这些:
首先设置机构的messageInstance
为:
messageInstance.body = @"Hello from Shah";
然后决定该消息的收件人:
messageInstance.recipients = [NSArray arrayWithObjects:@"12345678", @"87654321", nil];
设置一个委托你作为messageInstance:
messageInstance.messageComposeDelegate = self;
在最后一行做到这一点:
[self presentModalViewController:messageInstance animated:YES];
您可以使用sms:[target phone number]
URL打开SMS应用,但对如何预填短信体文本没有迹象。
一个进程间通信的中的MacOS的系统之一是XPC。该系统层已被开发用于基于使用libSystem中和的launchd plist中结构的转移的进程间通信。事实上,它是经由作为字典这种结构的交换允许管理进程的接口。由于遗传,iOS 5中具备这种机制也是如此。
你可能已经明白我的这个介绍的意思。是的,有在iOS系统的服务,包括为XPC通讯工具。我要举例说明了短信发送守护工作。但是,应该提到的是,这种能力是固定在iOS 6中,但相关的iOS 5.0-5.1.1。越狱,私人框架,以及其他非法手段并不需要为它的开发利用。只需要一组从目录/ usr / include中/ XPC / *头文件。
一个短信发送的iOS的元素是系统服务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的设置为短信发送业务。然而,XPC配置提供了用于创建-we需要采取用于激活一个步骤悬挂连接。
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。在.h文件中导入#import <MessageUI/MessageUI.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];
}
运行和GO!