Кто-нибудь знает, можно ли и как программно отправить SMS с iPhone
с помощью официального SDK / Cocoa Touch?
Как программно отправить смс на айфон?
Ответы (18)
Ограничения
Если бы вы могли отправлять SMS в программе на iPhone, вы могли бы писать игры, которые спамят людей в фоновом режиме. Я уверен, что вы действительно хотите получать спам от своих друзей: «Попробуйте эту новую игру! Она потрясает моих боксеров, и ваши тоже! Roxxersboxxers.com !!!! Если вы зарегистрируетесь сейчас, вы получите 3200 РБ. точки!!"
У Apple есть ограничения на автоматические (или даже частично автоматизированные) SMS-сообщения и операции набора номера. (Представьте, что игра вместо этого набирала 911 в определенное время дня)
Лучше всего настроить промежуточный сервер в Интернете, который использует онлайн-службу отправки SMS, и отправлять SMS по этому маршруту, если вам нужна полная автоматизация. (т.е. ваша программа на iPhone отправляет UDP-пакет на ваш сервер, который отправляет настоящее SMS)
iOS 4 Обновление
Однако iOS 4 теперь предоставляет viewController
, который вы можете импортировать в свое приложение. Вы предварительно заполняете поля SMS, затем пользователь может инициировать отправку SMS в контроллере. В отличие от формата URL-адреса «SMS: ...», это позволяет вашему приложению оставаться открытым и позволяет заполнять поля to и body. Вы даже можете указать несколько получателей.
Это предотвращает отправку автоматических SMS-сообщений приложениями без явного уведомления пользователя об этом. Вы по-прежнему не можете отправлять полностью автоматизированные SMS с самого iPhone, это требует некоторого взаимодействия с пользователем. Но это, по крайней мере, позволяет заполнить все и позволяет избежать закрытия приложения.
Класс MFMessageComposeViewController хорошо документирован, а обучающие материалы показывают, насколько легко это реализовать.
iOS 5 Обновить
iOS 5 включает обмен сообщениями для устройств iPod touch и iPad, поэтому, хотя я еще не тестировал это сам, возможно, все устройства iOS смогут отправлять SMS через MFMessageComposeViewController. Если это так, то Apple запускает SMS-сервер, который отправляет сообщения от имени устройств, у которых нет сотового модема.
iOS 6 Обновить
Никаких изменений в этом классе.
iOS 7 Обновление
Теперь вы можете проверить, принимает ли используемый вами носитель сообщения тему или вложения, а также какие вложения он принимает. Вы можете редактировать тему и добавлять вложения к сообщению, если это позволяет среда.
Обновление iOS 8
Никаких изменений в этом классе.
iOS 9 Обновление
Никаких изменений в этом классе.
Обновление iOS 10
Никаких изменений в этом классе.
iOS 11 Обновление
В этом классе нет значительных изменений
Ограничения этого класса
Имейте в виду, что это не будет работать на телефонах без iOS 4 и не будет работать на iPod touch или iPad, за исключением, возможно, iOS 5. Вы должны либо определить ограничения устройства и iOS, прежде чем использовать это. контроллер, или вы рискуете ограничить свое приложение только недавно обновленными моделями 3G, 3GS и 4 iPhone.
Однако промежуточный сервер, который отправляет 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
MFMessageComposeViewController *controller = ...
внутри блока if. (метод класса не требует наличия экземпляра для выполнения теста)
- person unsynchronized; 13.12.2013
http://blog.mugunthkumar.com/coding/iphone-tutorial-how-to-send-in-app-sms/
говорит о 502 Bad Gateway на моем ноутбуке. Может ссылка битая.
- person Nikita Vlasenko; 28.11.2015
- Вы должны добавить MessageUI.framework в свой проект Xcode
- Включите
#import <MessageUI/MessageUI.h>
в файл заголовка - Добавьте этих делегатов в файл заголовка
MFMessageComposeViewControllerDelegate
&UINavigationControllerDelegate
- В вашем
IBAction
методе объявите экземплярMFMessageComposeViewController
, скажите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
, если вы хотите знать результаты.
- person Raptor; 30.10.2015
Вы можете использовать sms:[target phone number]
URL-адрес, чтобы открыть приложение SMS, но нет никаких указаний о том, как предварительно заполнить текст SMS.
Одна из систем межпроцессного взаимодействия в MacOS - XPC. Этот системный уровень был разработан для межпроцессного взаимодействия на основе передачи структур plist с помощью libSystem и launchd. По сути, это интерфейс, позволяющий управлять процессами через обмен такими структурами, как словари. В силу наследственности iOS 5 также обладает этим механизмом.
Возможно, вы уже понимаете, что я имею в виду под этим введением. Да, в iOS есть системные службы, которые включают инструменты для связи XPC. И я хочу проиллюстрировать работу с демоном для отправки SMS. Однако следует отметить, что эта возможность исправлена в iOS 6, но актуальна для iOS 5.0—5.1.1. Для его эксплуатации не требуются джейлбрейк, Private Framework и другие нелегальные инструменты. Требуется только набор заголовочных файлов из каталога / usr / include / xpc / *.
Одним из элементов для отправки SMS в 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, настроенное на службу отправки 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");
});
Это все. SMS отправлено.
Добавьте 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 :, это определяется как тип, который распознается приложением сообщений и запускает его.
Следуйте этим процедурам
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:
метода обратного вызова. Иначе он просто будет там висеть.
- person SaltyNuts; 16.11.2014
Вот версия кода Swift для отправки SMS в iOS. Обратите внимание, что это работает только на реальных устройствах. Код протестирован в 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)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];
}
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:number"]]
Это был бы лучший и короткий способ сделать это.
Вы можете представить MFMessageComposeViewController, который может отправлять SMS, но с подсказкой пользователя (он нажимает кнопку отправки). Это невозможно сделать без разрешения пользователя. В iOS 11 вы можете сделать расширение, которое может быть похоже на фильтр для входящих сообщений, сообщая iOS, что это спам или нет. Больше ничего с СМС сделать нельзя
Вам необходимо использовать MFMessageComposeViewController, если вы хотите показать создание и отправку сообщения в собственном приложении.
В противном случае вы можете использовать метод sharedApplication.
tools->script editor
и в запросе POST использоватьMailApp.sendEmail
api для отправки электронной почты на номер телефона. att - ВАШ НОМЕР@mms.att.net, tmobile - ВАШ НОМЕР@tmomail.net Я думаю (ВСЕ БЕСПЛАТНО) - person Coty Embry   schedule 20.05.2017