538

公式SDK / Cocoa Touchを使用して、からプログラムでSMSを送信することが可能かどうか、またその方法を知っている人はいますか?iPhone

4

18 に答える 18

414

制限

iPhone のプログラム内で SMS を送信できれば、バックグラウンドで人々にスパムを送信するゲームを作成できます。「この新しいゲームを試してみてください! これで私のボクサーがロクサーになり、あなたのボクサーもそうなるでしょう! roxxersboxxers.com!!!! 今すぐサインアップすると、3,200 RB を獲得できます。ポイント!!」

Apple では、自動化された (または部分的に自動化された) SMS およびダイヤル操作に対して制限を設けています。(ゲームが特定の時間に 911 をダイヤルしたと想像してください)

完全な自動化が必要な場合は、オンライン SMS 送信サービスを使用する中間サーバーをインターネット上にセットアップし、そのルートを介して SMS を送信することをお勧めします。(つまり、iPhone 上のプログラムが UDP パケットをサーバーに送信し、サーバーが実際の SMS を送信します)

iOS 4 アップデート

ただし、iOS 4 では、viewControllerアプリケーションにインポートできる が提供されるようになりました。SMS フィールドに事前入力すると、ユーザーはコントローラー内で SMS 送信を開始できます。"SMS:..." url 形式を使用する場合とは異なり、これにより、アプリケーションを開いたままにし、toフィールドとbodyフィールドの両方に入力することができます。複数の受信者を指定することもできます。

これにより、ユーザーが明示的に認識していない限り、アプリケーションは自動化された SMS を送信できなくなります。iPhone 自体から完全に自動化された SMS を送信することはまだできず、ユーザーの操作が必要です。ただし、これにより、少なくともすべてを入力できるようになり、アプリケーションを閉じる必要がなくなります。

MFMessageComposeViewControllerクラスは十分に文書化されており、チュートリアルは実装がいかに簡単かを示しています。

iOS 5 アップデート

iOS 5 には iPod touch および iPad デバイス用のメッセージングが含まれているため、私自身はまだテストしていませんが、すべての iOS デバイスが MFMessageComposeViewController を介して SMS を送信できるようになる可能性があります。この場合、Apple はセルラー モデムを持たないデバイスに代わってメッセージを送信する SMS サーバーを実行しています。

iOS 6 アップデート

このクラスに変更はありません。

iOS 7 アップデート

使用しているメッセージ メディアが件名または添付ファイルを受け入れるかどうか、および受け入れる添付ファイルの種類を確認できるようになりました。件名を編集し、メディアで許可されている場合はメッセージに添付ファイルを追加できます。

iOS 8 アップデート

このクラスに変更はありません。

iOS 9 アップデート

このクラスに変更はありません。

iOS 10 アップデート

このクラスに変更はありません。

iOS 11 アップデート

このクラスに大きな変更はありません

このクラスの制限

これは iOS 4 のない携帯電話では機能せず、おそらく iOS 5 を除いて、iPod touch や iPad でも機能しないことに注意してください。これを使用する前に、デバイスと iOS の制限を検出する必要があります。または、最近アップグレードされた 3G、3GS、および 4 つの iPhone にアプリを制限するリスクがあります。

ただし、SMS を送信する中間サーバーは、インターネットにアクセスできる限り、これらのすべての iOS デバイスが SMS を送信できるようにするため、多くのアプリケーションにとっては、依然としてより優れたソリューションとなる可能性があります。または、両方を使用し、デバイスがサポートしていない場合にのみオンライン SMS サービスにフォールバックします。

于 2008-09-12T15:00:54.210 に答える
146

これがあなたが探していることを正確に行うチュートリアルです: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

于 2010-07-24T19:09:07.580 に答える
100
  1. MessageUI.framework を Xcode プロジェクトに追加する必要があります
  2. #import <MessageUI/MessageUI.h>ヘッダー ファイルに を含めます
  3. これらのデリゲートをヘッダー ファイルに追加してくださいMFMessageComposeViewControllerDelegate &UINavigationControllerDelegate
  4. あなたのメソッドで言うIBActionのインスタンスを宣言しますMFMessageComposeViewControllermessageInstance
  5. お使いのデバイスが if 条件で使用するテキストを送信できるかどうかを確認する[MFMessageComposeViewController canSendText]には、Yes/No を返します。
  6. 条件でこれらを実行しifます。

    1. あなたの最初のボディを次のように設定しますmessageInstance

      messageInstance.body = @"Hello from Shah";
      
    2. 次に、メッセージの受信者を次のように決定します。

      messageInstance.recipients = [NSArray arrayWithObjects:@"12345678", @"87654321",         nil];
      
    3. 次のように messageInstance にデリゲートを設定します。

      messageInstance.messageComposeDelegate = self;
      
    4. 最後の行で次のようにします。

      [self presentModalViewController:messageInstance animated:YES];
      
于 2011-12-07T16:50:58.800 に答える
50

URLを使用しsms:[target phone number]てSMSアプリケーションを開くことはできますが、SMS本文にテキストを事前に入力する方法についての指示はありません。

于 2008-09-12T14:41:55.753 に答える
25

MacOS のプロセス間通信システムの 1 つに XPC があります。このシステム層は、libSystem と launchd を使用した plist 構造の転送に基づくプロセス間通信用に開発されました。実際、辞書などの構造体の交換を介してプロセスを管理できるインターフェイスです。遺伝により、iOS 5 もこのメカニズムを備えています。

この紹介で私が何を意味するかは、すでにお分かりかもしれません。はい、XPC 通信用のツールを含む iOS のシステム サービスがあります。そして、SMS 送信用のデーモンを使用した作業を例示したいと思います。ただし、この機能は iOS 6 で修正されていますが、iOS 5.0 ~ 5.1.1 に関連することに注意してください。Jailbreak、Private Framework、およびその他の違法なツールは、その悪用には必要ありません。ディレクトリ /usr/include/xpc/* からの一連のヘッダー ファイルのみが必要です。

iOS で SMS を送信するための要素の 1 つは、システム サービス com.apple.chatkit です。このサービスのタスクには、短いテキスト メッセージの生成、管理、および送信が含まれます。制御を容易にするために、公開されている通信ポート com.apple.chatkit.clientcomposeserver.xpc を備えています。XPC サブシステムを使用すると、ユーザーの承認なしにメッセージを生成して送信できます。</p>

さて、接続を作成してみましょう。

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 構成では、中断された接続を作成できます。アクティブ化するには、もう 1 つの手順を実行する必要があります。

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 を送信しました。

于 2012-10-25T07:17:31.843 に答える
24

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];
 }
于 2013-05-10T21:38:08.053 に答える
14

この手順に従ってください

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

ランアンドゴー!

于 2014-07-29T10:32:29.250 に答える
12
//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]; 
}
于 2012-08-27T12:33:43.430 に答える
3

iOS 4 には、アプリケーションからの本文と受信者を含むメッセージの送信をサポートするクラスがあります。メールの送信と同じように機能します。ここでドキュメントを見つけることができます:リンクテキスト

于 2010-09-10T08:32:07.300 に答える
2

必要に応じて、クラスCoreTelephonyを呼び出したプライベート フレームワークを使用できます。CTMessageCenterSMSの送信方法はいくつかあります。

于 2010-01-29T02:15:13.963 に答える
1

これを使って:

- (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];
}
于 2012-05-18T05:47:57.230 に答える
1
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:number"]] 

これが最善かつ最短の方法です。

于 2014-08-04T12:36:30.317 に答える
1

You can present MFMessageComposeViewController, which can send SMS, but with user prompt(he taps send button). No way to do that without user permission. On iOS 11, you can make extension, that can be like filter for incoming messages , telling iOS either its spam or not. Nothing more with SMS cannot be done

于 2017-11-26T01:33:14.047 に答える
0

独自のアプリでメッセージの作成と送信を表示する場合は、 MFMessageComposeViewControllerを使用する必要があります。

それ以外の場合は、sharedApplicationメソッドを使用できます。

于 2015-03-30T06:31:19.730 に答える