1. ホーム
  2. ios

[解決済み] iOSでSwiftを使ってSMSを送信する

2023-05-14 02:08:14

質問

まず第一に、私はこれが重複していないことに本当に驚いています。なぜなら、Objective-Cでこれを解決するstackoverflowの質問は大量にありますが、Swiftを使った良い回答はまだ見たことがないからです。

私が探しているものは、与えられた電話番号にテキストメッセージの本文として任意の文字列を送信するSwiftのコードスニペットです。本質的に、私は次のようなものが欲しいです。 この のようなものが欲しいのですが、Objective-Cの代わりにSwiftで、Appleの公式ドキュメントからです。

Android ではほんの数行のコードでできるので、これはそれほど難しくないのではと想像しています。

編集: 私が探しているのは Swift のコードの 5~20 行です、これが広すぎるということには同意しません。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行です。Java は Swift よりもずっと冗長な傾向があるので、私が尋ねていることが "too broad" であるかどうかは疑わしいです。むしろ、私が Objective-C MessageComposer オブジェクトを使用する方法を知らない可能性が高く、私が上にリンクしたドキュメントは Swift の使用に関して不明瞭だからです。

どのように解決するのか?

あなたが本当に答えを得たかどうかはわかりません。私は同じような狩りにあって、この解決策に出会って、それを動作させることができました。

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
    }
}