Swift를 사용하여 iOS에서 SMS 보내기
우선, 저는 이것이 중복되지 않는다는 것에 정말 놀랐습니다. 왜냐하면 Objective-C에는 이것을 해결하는 스택 오버플로 문제가 많이 있지만 Swift를 사용한 좋은 답변을 아직 보지 못했기 때문입니다.
제가 찾고 있는 것은 Swift의 코드 스니펫으로 임의의 문자열을 텍스트 메시지 본문으로 지정된 전화 번호로 보내는 것입니다.기본적으로, 저는 애플의 공식 문서에 있는 것과 같은 것을 원하지만, Objective-C 대신 Swift에 있습니다.
안드로이드에서 코드 몇 줄로 수행할 수 있기 때문에 이것은 그리 어렵지 않을 것으로 생각합니다.
편집: 제가 찾고 있는 것은 5-20줄의 Swift 코드입니다. 저는 이것이 너무 광범위하다는 것에 동의하지 않습니다.Java(Android용)에서 솔루션은 다음과 같습니다.
package com.company.appname;
import android.app.Activity;
import android.telephony.SmsManager;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
public static final mPhoneNumber = "1111111111";
public static final mMessage = "hello phone";
SmsManager.getDefault().sendTextMessage(mPhoneNumber, null, mMessage, null, null);
}
}
이것은 안드로이드 솔루션입니다. 단 11줄입니다.자바는 Swift보다 훨씬 더 장황한 경향이 있기 때문에 제가 요청하는 것이 "너무 광범위하다"고 의심됩니다. 위에서 링크한 문서가 Swift의 사용과 관련하여 명확하지 않기 때문에 Objective-C Message Composer 개체를 사용하는 방법을 모를 가능성이 더 높습니다.
당신이 정말로 답을 얻었는지 확실하지 않습니다.저는 비슷한 일을 하다가 우연히 이 솔루션을 발견하고 작동하게 되었습니다.
import UIKit
import MessageUI
class ViewController: UIViewController, MFMessageComposeViewControllerDelegate {
@IBOutlet weak var phoneNumber: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func sendText(sender: UIButton) {
if (MFMessageComposeViewController.canSendText()) {
let controller = MFMessageComposeViewController()
controller.body = "Message Body"
controller.recipients = [phoneNumber.text]
controller.messageComposeDelegate = self
self.presentViewController(controller, animated: true, completion: nil)
}
}
func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult) {
//... handle sms screen actions
self.dismissViewControllerAnimated(true, completion: nil)
}
override func viewWillDisappear(animated: Bool) {
self.navigationController?.navigationBarHidden = false
}
}
Swift 3.0 솔루션:
func sendSMSText(phoneNumber: String) {
if (MFMessageComposeViewController.canSendText()) {
let controller = MFMessageComposeViewController()
controller.body = ""
controller.recipients = [phoneNumber]
controller.messageComposeDelegate = self
self.present(controller, animated: true, completion: nil)
}
}
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
//... handle sms screen actions
self.dismiss(animated: true, completion: nil)
}
override func viewWillDisappear(_ animated: Bool) {
self.navigationController?.isNavigationBarHidden = false
}
Swift 5에서 iMessage를 보내기 위해 다음 코드를 사용합니다.
메시지만UI 패키지 및 구현 MFMessageComposeViewControllerDelegate
import UIKit
import MessageUI
class ViewController: UIViewController, MFMessageComposeViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func sendNewIMessage(_ sender: Any) {
let messageVC = MFMessageComposeViewController()
messageVC.body = "Enter a message details here";
messageVC.recipients = ["recipients_number_here"]
messageVC.messageComposeDelegate = self
self.present(messageVC, animated: true, completion: nil)
}
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
switch (result) {
case .cancelled:
print("Message was cancelled")
case .failed:
print("Message failed")
case .sent:
print("Message was sent")
default:
return
}
dismiss(animated: true, completion: nil)
}
}
더 간단한 솔루션은 html 링크를 여는 것일 수 있습니다.
let mPhoneNumber = "1111111111";
let mMessage = "hello%20phone";
if let url = URL(string: "sms://" + mPhoneNumber + "&body="+mMessage) {
UIApplication.shared.open(url)
}
공백을 "%20"(으)로 바꾸었는지 확인하십시오.
스위프트 3, 4, 5
@IBAction func sendSmsClick(_ sender: AnyObject) {
guard MFMessageComposeViewController.canSendText() else {
return
}
let messageVC = MFMessageComposeViewController()
messageVC.body = "Enter a message";
messageVC.recipients = ["Enter tel-nr"]
messageVC.messageComposeDelegate = self;
self.present(messageVC, animated: false, completion: nil)
}
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
switch (result.rawValue) {
case MessageComposeResult.cancelled.rawValue:
print("Message was cancelled")
self.dismiss(animated: true, completion: nil)
case MessageComposeResult.failed.rawValue:
print("Message failed")
self.dismiss(animated: true, completion: nil)
case MessageComposeResult.sent.rawValue:
print("Message was sent")
self.dismiss(animated: true, completion: nil)
default:
break;
}
}
UI는 다음과 같이 표시됩니다.
UIView 컨트롤러에 의존하지 않으려면 Swift 3.0 솔루션을 따르십시오.
import UIKit
import MessageUI
class ECMMessageComposerBuilder: NSObject {
private dynamic var customWindow: UIWindow?
private var body: String?
private var phoneNumber: String?
fileprivate var messageController: MFMessageComposeViewController?
var canCompose: Bool {
return MFMessageComposeViewController.canSendText()
}
func body(_ body: String?) -> ECMMessageComposerBuilder {
self.body = body
return self
}
func phoneNumber(_ phone: String?) -> ECMMessageComposerBuilder {
self.phoneNumber = phone
return self
}
func build() -> UIViewController? {
guard canCompose else { return nil }
messageController = MFMessageComposeViewController()
messageController?.body = body
if let phone = phoneNumber {
messageController?.recipients = [phone]
}
messageController?.messageComposeDelegate = self
return messageController
}
func show() {
customWindow = UIWindow(frame: UIScreen.main.bounds)
customWindow?.rootViewController = MNViewController()
// Move it to the top
let topWindow = UIApplication.shared.windows.last
customWindow?.windowLevel = (topWindow?.windowLevel ?? 0) + 1
// and present it
customWindow?.makeKeyAndVisible()
if let messageController = build() {
customWindow?.rootViewController?.present(messageController, animated: true, completion: nil)
}
}
func hide(animated: Bool = true) {
messageController?.dismiss(animated: animated, completion: nil)
messageController = nil
customWindow?.isHidden = true
customWindow = nil
}
}
extension ECMMessageComposerBuilder: MFMessageComposeViewControllerDelegate {
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
controller.dismiss(animated: true, completion: nil)
hide()
}
}
작곡가를 다음과 같이 부릅니다.
let phoneNumber = "987654321"
let composer = MNMessageComposerBuilder()
composer.phoneNumber(phoneNumber).show()
또는 게으른 var를 사용합니다.
let phoneNumber = "987654321"
private lazy var messageComposer: MNMessageComposerBuilder = {
let composer = MNMessageComposerBuilder()
return composer
}()
messageComposer.phoneNumber(phoneNumber).show()
@IBAction func sendMessageBtnClicked(sender: AnyObject) {
var messageVC = MFMessageComposeViewController()
messageVC.body = "Enter a message";
messageVC.recipients = ["Enter tel-nr"]
messageVC.messageComposeDelegate = self;
self.presentViewController(messageVC, animated: false, completion: nil)
}
func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult) {
switch (result.value) {
case MessageComposeResultCancelled.value:
println("Message was cancelled")
self.dismissViewControllerAnimated(true, completion: nil)
case MessageComposeResultFailed.value:
println("Message failed")
self.dismissViewControllerAnimated(true, completion: nil)
case MessageComposeResultSent.value:
println("Message was sent")
self.dismissViewControllerAnimated(true, completion: nil)
default:
break;
}
}
언급URL : https://stackoverflow.com/questions/26350220/sending-sms-in-ios-with-swift
'codememo' 카테고리의 다른 글
| Bottle Py: jQuery AJAX 요청에 대한 CORS 활성화 (0) | 2023.08.01 |
|---|---|
| 보기에 ID를 프로그래밍 방식으로 할당하려면 어떻게 해야 합니까? (0) | 2023.08.01 |
| PHP Ajax 업로드 진행률 표시줄 (0) | 2023.07.27 |
| builder @angular-devkit/build-angular:dev-server on server 명령에 대한 구현을 찾을 수 없습니다. (0) | 2023.07.27 |
| 서비스 계정을 변경하는 Powershell 스크립트 (0) | 2023.07.27 |