Отправка SMS на Swift (iOS/macOS): обзор библиотек и API
В современной мобильной разработке возможность отправки SMS-сообщений остаётся востребованной функцией: от подтверждения номера телефона до массовых уведомлений. В экосистеме Apple (iOS/macOS) на языке Swift существует несколько подходов — от встроенного MessageUI до интеграции с облачными SMS-провайдерами. В этой статье мы разберём основные библиотеки и API, их преимущества и ограничения, а также приведём практические примеры кода.
1. Встроенная библиотека MessageUI
Самый простой способ — использовать фреймворк MessageUI, доступный на iOS и macOS. Он позволяет вызвать стандартный интерфейс отправки SMS (через MFMessageComposeViewController) без подключения сторонних SDK.
Возможности:
- Отправка SMS через системное приложение «Сообщения».
- Поддержка вложений (изображения, видео, контакты).
- Не требует регистрации у провайдера.
Ограничения:
- Работает только на физических устройствах (не в симуляторе).
- Пользователь видит интерфейс и подтверждает отправку.
- Не подходит для автоматической (серверной) отправки.
Пример кода на Swift (iOS):
import MessageUI
import UIKit
class ViewController: UIViewController, MFMessageComposeViewControllerDelegate {
@IBAction func sendSMSTapped(_ sender: UIButton) {
guard MFMessageComposeViewController.canSendText() else {
print("Устройство не поддерживает отправку SMS")
return
}
let messageVC = MFMessageComposeViewController()
messageVC.body = "Привет! Это тестовое SMS из Swift."
messageVC.recipients = ["+79123456789"]
messageVC.messageComposeDelegate = self
present(messageVC, animated: true, completion: nil)
}
func messageComposeViewController(_ controller: MFMessageComposeViewController,
didFinishWith result: MessageComposeResult) {
switch result {
case .sent:
print("SMS отправлено")
case .cancelled:
print("Отменено пользователем")
case .failed:
print("Ошибка отправки")
@unknown default:
break
}
controller.dismiss(animated: true, completion: nil)
}
}
Для macOS используется NSSharingService с типом .composeMessage, но его функционал ограничен.
2. Twilio — облачный API для SMS
Twilio — один из самых популярных сервисов для программной отправки SMS. Интеграция в Swift-приложение осуществляется через REST API или официальный Swift-клиент twilio-swift.
Преимущества:
- Высокая скорость доставки, поддержка более 100 стран.
- Возможность отправки без участия пользователя (серверная логика).
- Гибкие настройки: отправитель, шаблоны, вебхуки.
Пример отправки через URLSession:
import Foundation
func sendSMSviaTwilio(to phoneNumber: String, message: String) {
let accountSID = "YOUR_ACCOUNT_SID"
let authToken = "YOUR_AUTH_TOKEN"
let fromNumber = "+1234567890" // ваш Twilio-номер
let urlString = "https://api.twilio.com/2010-04-01/Accounts/\(accountSID)/Messages.json"
guard let url = URL(string: urlString) else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
let loginString = "\(accountSID):\(authToken)"
guard let loginData = loginString.data(using: .utf8) else { return }
let base64Login = loginData.base64EncodedString()
request.setValue("Basic \(base64Login)", forHTTPHeaderField: "Authorization")
let bodyParams = "To=\(phoneNumber)&From=\(fromNumber)&Body=\(message)"
request.httpBody = bodyParams.data(using: .utf8)
URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Ошибка: \(error)")
} else if let data = data, let result = String(data: data, encoding: .utf8) {
print("Ответ Twilio: \(result)")
}
}.resume()
}
3. Sinch — SDK для iOS
Sinch предоставляет нативный Swift SDK для отправки SMS. Он особенно удобен для приложений, уже использующих Sinch для голосовых звонков или чата.
Особенности:
- Простая инициализация через
SinchClient. - Поддержка шаблонов и отслеживания статуса доставки.
- Работает на iOS и macOS (через Catalyst).
Пример инициализации:
<
Также в библиотеке
Сериализация объектов в JavaScript (Node.js): полное руководство
ts-functional-pipe для TypeScript: полное руководство с примерами
Интернационализация (i18n) в Go (Golang): библиотека go-i18n
Обработка изображений в Kotlin: resize и crop с библиотекой ImageMagick
PDF генерация в C# (.NET): обзор библиотек и инструментов