24/7 twenty-four seven

iOS/OS X application programing topics.

iPhone アプリケーションからSMSを送信する

iOS 4.0 からMessage UI Framework に追加されたMFMessageComposeViewController を使用すると、アプリケーションから SMS を送信することができます。

使い方は下記のようになります。

// Displays an SMS composition interface inside the application. 
-(void)displaySMSComposerSheet {
    MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
    picker.messageComposeDelegate = self;
    
    picker.body = [NSString stringWithUTF8String:"これはSMS送信のテストです。"];
    picker.recipients = [NSArray arrayWithObjects:@"090-XXXX-XXXX", nil];
	
    [self presentModalViewController:picker animated:YES];
    [picker release];
}


実行画面はこんなふうになります。


本文をあらかじめプログラムから設定できるのが、従来のスキーマを使った方法 (sms:090XXXXXXX) よりも便利ですね。
複数の宛先に同時に送信することも可能です。


注意点としては、シミュレータ および iPad、iPod touch の SMS が使用できないデバイスでは、 [[MFMessageComposeViewController alloc] init]; の結果が必ず nil になります。
nil を presentModalViewController: に渡すと クラッシュするので、必ず canSendText で、SMS が送信可能がどうかをチェックする必要があります。

メール送信のためのクラス MFMailComposeViewController ではシミュレータでも画面は表示できるので、ちょっと画面を確認したいだけでもデバイスを使う必要があるので少し不便です。

iPhone なら、SIM カードが挿入されていなくても送信画面の表示、および送信を実行することができました。(もちろん送信は失敗します)
送信は失敗しますが、MessageComposeResult は Failed ではなく Sent が返ってきました。

MFMailComposeResult もそうでしたが、結果が Failed になるのがどういう場合かイマイチわかりません。


詳しい使い方はアップルのサンプルコード MessageComposer や下記リファレンスを参考にしてください。

MFMessageComposeViewController Class Reference