Noveo

Наш блог Отправка MMS сообщений из iOS-приложения

Отправка MMS сообщений из iOS-приложения

В продолжение рубрики «Обмен премудростями» — новый пост от Саши :).

MMS (Multimedia Messaging Service) — система передачи мультимедийных сообщений (изображений, мелодий, видео) в сетях сотовой связи. Технология устаревшая, и максимальный размер одного сообщения составляет обычно 300 кБ, но завист от оператора и настроек телефона.

В iOS вплоть до версии 7.0 не было документированного способа отправить MMS сообщение. В iOS 6 не получается это сделать даже с помощью известных хаков (без участия пользователя).

Дальше рассказано, как обстоят дела с созданием MMS в разных версиях iOS.

iOS <= 5

Примерный алгоритм создания MMS с картинкой:

  1. Создаём UIImage
  2. Помещаем картинку в буфер обмена (UIPasteboard)
  3. Создаём MFMessageComposeViewController
  4. Отображаем Message Composer как модальный VC
  5. Перебираем сабвью Message Composer, находим поле с текстом
  6. Вставляем картинку из буфера в поле
  7. Надеемся, что приложение не зареджектят

iOS 6

Apple начинает думать о безопасности и переводит системные диалоги на использование технологии XPC. При этом чужое окно находится в отдельном процессе, и у нас нет простых способов доступиться до его сабвьюшек. В перспективе эта технология позволит любому стороннему приложению объявить себя провайдером некоего сервиса, к которому другие приложения могут обращаться, не имея при этом возможности залезть куда не положено.

Хорошая серия статей на эту тему:

После такого обновления шаги 5 и 6 становятся невозможны, и пользователю прийдётся вставить картинку из буфера самостоятельно.

iOS 7

Выдержка из iOS 6.1 — 7.0 API Diffs:

MFMessageComposeViewController.h

Added -[MFMessageComposeViewController addAttachmentData:typeIdentifier:filename:]
Added -[MFMessageComposeViewController addAttachmentURL:withAlternateFilename:]
Added MFMessageComposeViewController.attachments
Added +[MFMessageComposeViewController canSendAttachments]
Added +[MFMessageComposeViewController canSendSubject]
Added -[MFMessageComposeViewController disableUserAttachments]
Added +[MFMessageComposeViewController isSupportedAttachmentUTI:]
Added MFMessageComposeViewController.subject
Added MFMessageComposeViewControllerAttachmentAlternateFilename
Added MFMessageComposeViewControllerAttachmentURL

Как видим, у Message Composer’а появились документированные методы для добавления вложений.

Это было очень кстати для одного из наших недавних проектов, где как раз нужна была возможность отправлять видео и текст через MMS. Был написан вполне очевидный код:

MFMessageComposeViewController *mmsController = [[MFMessageComposeViewController alloc] init];
mmsController.messageComposeDelegate = self;
[mmsController setBody:@"Predefined message text"];
NSString *videoFilePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp4"];
NSURL *videoFileURL = [NSURL fileURLWithPath:videoFilePath];
[mmsController addAttachmentURL:videoFileURL withAlternateFilename:@"test.mp4"];
[self presentViewController:self.mmsController animated:YES completion:nil];

С первой попытки код отказался корректно работать. Создавалось MMS сообщение, которое содержало только видео, но не текст. Если убрать добавление вложения, создавалось сообщение с текстом. Вся история происходила ещё до релиза iOS 7, и beta-версии вполне могли работать некорректно. После обновления прошивки iPhone до более новой версии (iOS 7 beta 6, 11A4449d) всё наконец заработало как должно.

Вывод

Если в проекте, который пришёл на оценку, есть функция отправки MMS, то можно считать, что для iOS 7 всё хорошо и реализация делается за 5 минут, для более старых версий — лучше всего пользоваться сторонними сервисами, берущими деньги и дающими API.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

НазадПредыдущий пост ВпередСледующий пост

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: