Кто-нибудь знает, возможно ли и как программно отправить SMS с iPhone
, используя официальный SDK / Cocoa Touch?
Если вы смогли отправить SMS внутри программы на iPhone, вы'сможете писать игры, которые спамят людей в фоновом режиме. Я'уверен, что вы действительно хотите получить спам от своих друзей, "Попробуйте эту новую игру! Она заводит моих боксеров, и ваших тоже! roxxersboxxers.com!!!! Если ты зарегистрируешься сейчас, то получишь 3,200 очков RB!!!"
У Apple есть ограничения на автоматизированные (или даже частично автоматизированные) SMS и набор номера. (Представьте, если бы игра вместо этого набирала 911 в определенное время суток).
Лучше всего установить промежуточный сервер в Интернете, который использует онлайн-сервис отправки SMS, и отправлять SMS по этому маршруту, если вам нужна полная автоматизация. (т.е. ваша программа на iPhone посылает UDP-пакет на ваш сервер, который отправляет реальное SMS).
iOS 4, однако, теперь предоставляет viewController
, который вы можете импортировать в свое приложение. Вы заполняете поля SMS, а затем пользователь может инициировать отправку SMS внутри контроллера. В отличие от использования формата "SMS:..." url, это позволяет вашему приложению оставаться открытым и заполнять поля to и body. Вы даже можете указать несколько получателей.
Это предотвращает автоматическую отправку SMS без явного уведомления пользователя. Вы по-прежнему не можете отправлять полностью автоматические SMS с самого iPhone, это требует некоторого взаимодействия с пользователем. Но это, по крайней мере, позволяет заполнить все поля и избежать закрытия приложения.
Класс MFMessageComposeViewController хорошо документирован, а учебники показывают, как легко его реализовать.
iOS 5 включает обмен сообщениями для устройств iPod touch и iPad, поэтому, хотя я еще не тестировал это сам, может оказаться, что все устройства iOS смогут отправлять SMS через MFMessageComposeViewController. Если это так, то Apple запускает SMS-сервер, который отправляет сообщения от имени устройств, не имеющих сотового модема.
Никаких изменений в этом классе.
Теперь вы можете проверить, принимает ли используемое вами средство передачи сообщений тему или вложения, а также какие вложения оно принимает. Вы можете редактировать тему и добавлять вложения в сообщение, если носитель позволяет это сделать.
Никаких изменений в этом классе.
Нет изменений в этом классе.
Нет изменений в этом классе.
Нет существенных изменений в этом классе
Имейте в виду, что он не будет работать на телефонах без iOS 4, и он не будет работать на iPod touch или iPad, за исключением, возможно, iOS 5. Вы должны либо определить ограничения устройства и iOS перед использованием этого контроллера, либо рискуете ограничить свое приложение недавно обновленными iPhone 3G, 3GS и 4.
Однако промежуточный сервер, отправляющий SMS, позволит любому из этих iOS-устройств отправлять SMS, если у них есть доступ в Интернет, поэтому для многих приложений он может оказаться лучшим решением. В качестве альтернативы используйте оба варианта и переходите на онлайн-сервис 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
MFMessageComposeViewControllerDelegate
& UINavigationControllerDelegate
MFMessageComposeViewController
говорить messageInstance
[MFMessageComposeViewController canSendText]
в if условие, это'МР возврата Да/нет если
условие эти:messageInstance.тело = @"Привет от шаха и";
messageInstance.получатели = [arrayWithObjects:@" списка NSArray;12345678 наша" @"и 87654321", у, мь]; 3. Установить делегат для вашего messageInstance как:
messageInstance.messageComposeDelegate = "я"; 4. В последней строке этого:
[сам presentModalViewController:messageInstance анимированные:да];
Вы можете использовать URL sms:[целевой номер телефона]
для открытия приложения SMS, но нет никаких указаний о том, как заполнить тело SMS текстом.
Одной из систем межпроцессного взаимодействия в ОС macOS повстанец. Эта система слоев была разработана для межпроцессного взаимодействия на основе передачи файла plist конструкций с использованием libSystem и файл launchd. По сути, это интерфейс, который позволяет управлять процессами через такие структуры, как словари. Из-за наследственности, а iOS 5 обладает также этот механизм.
Вы могли бы уже понять, что я имею в виду введение. Да, есть несколько системных служб в iOS, которые включают в себя инструменты для ХРС связи. И я хочу, чтобы проиллюстрировать работу с daemon для отправки SMS. Однако, следует отметить, что эта способность фиксируется в iOS 6, но это актуально для iOS 5.0—5.1.1. Побег из тюрьмы, частные структуры, и другие незаконные инструменты не требуются для его эксплуатации. Лишь набор заголовочных файлов из каталога /usr/включить необходимые/повстанец/* несколько.
Одним из элементов для отправки SMS в iOS является обслуживание системы com.яблоко.chatkit, в задачи которого входит накопление, обработка и отправка коротких текстовых сообщений. Для простоты управления, она имеет общедоступных коммуникационных портов com.яблоко.chatkit.clientcomposeserver.хрс. Используя подсистемы ПК, вы можете создавать и отправлять сообщения без участия пользователя'ы утверждения.
Ну, пусть's попытаться создать подключения.
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);
Теперь у нас есть myConnection подключения к ПК установлен в сервис СМС рассылок. Однако, конфигурация модели предусматривает создание натяжных соединений —нам нужно сделать еще один шаг для активации.
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_connection_send_message(myConnection, mydict);
xpc_connection_send_barrier(myConnection, ^{
NSLog(@"The message has been successfully delivered");
});
Что's все. СМС отправлено.
Добавить MessageUI.Рамки и использовать следующий код
#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 будет автоматически переходить из приложения в приложение Сообщения's стр. создании сообщения. Так как в URL'программы S начинается с смс:, определяется как тип, который признан сообщения приложение и запускает его.
Следить за этим процедуры
1 .Добавить MessageUI.Рамки для проекта
2 . Импорт #импорт <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 . Реализовать метод делегата, если вы хотите.
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
///your stuff here
[self dismissViewControllerAnimated:YES completion:nil];
}
Бегать и ходить!
//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];
}
Вот Свифт версия код для отправки SMS в iOS. Пожалуйста, отметил, что он работает только на реальных устройствах. Тестирование кода в iOS 7+. Вы можете подробнее здесь.
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)
}
}
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.")
}
}
- (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients
{
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
UIImage *ui =resultimg.image;
pasteboard.image = ui;
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:"]];
}
Есть класс В iOS 4, которая поддерживает отправку сообщений с телом и получатель от вашего приложения. Он работает так же, как отправка электронной почты. Здесь вы можете найти документацию: текст ссылки
метод //звонок с именем и номером.
-(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];
}
}
Вы можете представить MFMessageComposeViewController, который может отправлять СМС, но с разрешения пользователя(он кнопку "Отправить" метчики). Нет возможности делать это без разрешения пользователя. На iOS 11, можно сделать расширение, которое может быть как фильтр входящих сообщений , говорю прошивкой либо его спамом или нет. Ничего больше с SMS не может быть сделано
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:number"]]
Это будет самый лучший и короткий способ сделать это.
Используйте это:
- (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];
}