Кто-нибудь знает, возможно ли и как программно отправить SMS с iPhone с помощью официального SDK / Cocoa Touch?
Если использование официального SDK не является обязательным для других, я написал этот пост, чтобы показать, как это сделать с помощью Twilio: twilio.com/blog/2016/11/…
вы можете создать электронную таблицу google из своего gmail, ввести нужные поля, затем выполнить tools->script editor и в запросе POST использовать MailApp.sendEmail api для отправки электронной почты на номер телефона. att - ВАШ НОМЕР@mms.att.net, tmobile - ВАШ НОМЕР@tmomail.net Я думаю (ВСЕ БЕСПЛАТНО)





Вы можете использовать URL-адрес sms:[target phone number], чтобы открыть приложение SMS, но нет никаких указаний о том, как предварительно заполнить текст SMS.
response-native-communications использует параметр & body = для предварительного заполнения текста при открытии sms: targetphonenumber & body = textyouwanttoprefillwith для iOS.
Я только что попробовал это на своем iphone 8, и он отлично сработал ... спасибо!
Мне нужно отправить sms на определенный номер, но с заранее заданным (предварительно заполненным) основным текстом. Основной текст должен быть выбран вручную из 4 возможных вариантов. Например. Приложение открывается и всплывает «выберите причину». Тогда доступны 4 варианта. Затем пользователь выбирает один из этих 4 вариантов, а затем автоматически отправляется SMS, содержащее в качестве основного текста выбор пользователя. любой совет?
Если бы вы могли отправлять SMS в программе на iPhone, вы могли бы писать игры, которые спамят людей в фоновом режиме. Я уверен, что вы действительно хотите получать спам от своих друзей: «Попробуйте эту новую игру! Она потрясает моих боксеров, и ваши тоже! Roxxersboxxers.com !!!! Если вы зарегистрируетесь сейчас, вы получите 3200 РБ. точки!!"
У Apple есть ограничения на автоматические (или даже частично автоматизированные) SMS-сообщения и операции набора номера. (Представьте, что игра вместо этого набирала 911 в определенное время дня)
Лучше всего настроить промежуточный сервер в Интернете, который использует онлайн-службу отправки SMS, и отправлять SMS по этому маршруту, если вам нужна полная автоматизация. (т.е. ваша программа на iPhone отправляет UDP-пакет на ваш сервер, который отправляет настоящее SMS)
Однако iOS 4 теперь предоставляет viewController, который вы можете импортировать в свое приложение. Вы предварительно заполняете поля SMS, затем пользователь может инициировать отправку SMS в контроллере. В отличие от формата URL-адреса «SMS: ...», это позволяет вашему приложению оставаться открытым и позволяет заполнять поля к и тело. Вы даже можете указать несколько получателей.
Это предотвращает отправку автоматических SMS-сообщений приложениями без явного уведомления пользователя об этом. Вы по-прежнему не можете отправлять полностью автоматизированные SMS с самого iPhone, это требует некоторого взаимодействия с пользователем. Но это, по крайней мере, позволяет заполнить все и позволяет избежать закрытия приложения.
Класс MFMessageComposeViewController хорошо документирован, а учебные пособия показывает, насколько легко его реализовать.
iOS 5 включает обмен сообщениями для устройств iPod touch и iPad, поэтому, хотя я еще не тестировал это сам, возможно, все устройства iOS смогут отправлять SMS через MFMessageComposeViewController. Если это так, то Apple использует сервер SMS, который отправляет сообщения от имени устройств, у которых нет сотового модема.
Никаких изменений в этом классе.
Теперь вы можете проверить, принимает ли используемый вами носитель сообщения тему или вложения, а также какие вложения он принимает. Вы можете редактировать тему и добавлять вложения к сообщению, если это позволяет среда.
Никаких изменений в этом классе.
Никаких изменений в этом классе.
Никаких изменений в этом классе.
Никаких существенных изменений в этом классе
Имейте в виду, что это не будет работать на телефонах без iOS 4 и не будет работать на iPod touch или iPad, за исключением, возможно, iOS 5. Вы должны либо определить ограничения устройства и iOS, прежде чем использовать это. контроллер, или вы рискуете ограничить свое приложение только недавно обновленными моделями 3G, 3GS и 4 iPhone.
Однако промежуточный сервер, который отправляет SMS, позволит любому из этих устройств iOS отправлять SMS, пока у них есть доступ в Интернет, поэтому это может быть лучшим решением для многих приложений. В качестве альтернативы можно использовать оба варианта и вернуться к онлайн-службе SMS только в том случае, если устройство ее не поддерживает.
И если вы купите этот домен, я больше никогда не смогу смотреть на вас так же.
Я думаю, это иронично, что кто-то пометил этот пост как спам. Читайте между строк, народы!
-1 потому что это спекуляция. Также см. Ответы Джуса 'Wondrin' и rydgaze о том, как отправлять SMS-сообщения из приложения.
@Frank - Обновлена моя запись, чтобы отразить новые функции iOS 4. Удалены бессвязные формулировки.
Я знаю, что это очень поздно, но можно ли отправить сообщение с фотографией в качестве вложения?
К этому можно добавить, что в iOS5 Apple не отправляет SMS, как предполагает Адам, они используют iMessage с устройствами, которые по своей сути не являются телефоном.
@edhedges, у вас должен быть новый вопрос, а не комментарий.
Я очень ценю, что вы обновляете этот пост для новых версий iOS. :)
Мне нужно отправить sms на определенный номер, но с заранее заданным (предварительно заполненным) основным текстом. Основной текст должен быть выбран вручную из 4 возможных вариантов. Например. Приложение открывается и всплывает «выберите причину». Тогда доступны 4 варианта. Затем пользователь выбирает один из этих 4 вариантов, а затем автоматически отправляется SMS, содержащее в качестве основного текста выбор пользователя. Есть подсказка?
Если вы хотите, вы можете использовать частный фреймворк CoreTelephony, который называется классом CTMessageCenter. Есть несколько способов отправить смс.
Он специально спросил, возможно ли это с помощью официального SDK.
Можете ли вы предоставить дополнительную информацию о частном API? У меня нет проблем с использованием частного фреймворка, потому что мне не нужно публиковать его в App Store.
Вот руководство, которое сделает именно то, что вы ищете: 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
Тем не менее, форма для SMS должна появиться. Любой способ отправить в фоновом режиме?
Вы, безусловно, можете отправлять SMS в фоновом режиме с помощью такой службы, как Twilio, но если вы хотите отправить его с номера телефона пользователя, они должны утвердить сообщение указанным выше способом.
любой, кто использует приведенный выше код, может пожелать рассмотреть возможность размещения MFMessageComposeViewController *controller = ... внутри блока if. (метод класса не требует наличия экземпляра для выполнения теста)
Ссылка http://blog.mugunthkumar.com/coding/iphone-tutorial-how-to-send-in-app-sms/ говорит "502 Bad Gateway" на моем ноутбуке. Может ссылка битая.
В iOS 4 есть класс, который поддерживает отправку сообщений с телом и получателями из вашего приложения. Работает так же, как и отправка почты. Вы можете найти документацию здесь: текст ссылки
#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, если вы хотите знать результаты.
Пожалуйста, поставьте код для тестирования. @Najeebullah Shah здесь или в гитхабе.
Использовать это:
- (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];
}
//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];
}
вы должны увидеть эту ссылку: blog.mugunthkumar.com/coding/… это поможет вам
Одна из систем межпроцессного взаимодействия в 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 отправлено.
Вы не должны использовать XPC для отправки SMS. Созданное приложение не будет одобрено Apple. Вместо этого используйте MessageUI Framework
Если вы используете эту технику для приложения, которое используете для своей организации, и приложение не проходит через магазин приложений, вам не о чем беспокоиться.
Получение «Ошибка подключения к песочнице XPC: Недопустимое подключение» в iOS 12
Добавьте 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];
}
привет, это здорово, но можем ли мы сделать эту функцию из фона?
Apple не позволит вам отправлять сообщения без одобрения пользователей. Он должен отправить сообщение / почту, вручную нажав кнопку. В качестве альтернативы вы можете использовать настраиваемую службу, отправив электронные письма / номера на свой сервер, а затем отправив. Хотя вы не можете сделать это прямо на iPhone
- (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients
{
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
UIImage *ui =resultimg.image;
pasteboard.image = ui;
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:"]];
}
насколько полезны ваши параметры?
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: @ "sms:"]];
Вы можете использовать такой подход:
[[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:. Иначе он просто будет там висеть.
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:number"]]
Это был бы лучший и короткий способ сделать это.
// вызов метода с именем и номером.
-(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, если вы хотите показать создание и отправку сообщения в вашем собственном приложении.
В противном случае вы можете использовать метод sharedApplication.
Вот версия кода 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.")
}
}
Вы можете представить MFMessageComposeViewController, который может отправлять SMS, но с подсказкой пользователя (он нажимает кнопку отправки). Это невозможно сделать без разрешения пользователя. В iOS 11 вы можете сделать расширение, которое может быть похоже на фильтр для входящих сообщений, сообщая iOS, что это спам или нет. Больше ничего с СМС сделать нельзя
Свежий ответ!
в iOS 4 вы можете отправить sms с кодом, но проблема в том, что ваше приложение будет закрыто