Delphi Xe8 を使用して iOS で自動テキスト メッセージを送信することは可能ですか? Android でこれを行う例は見つかりましたが、iOS では見つかりませんでした。Delphi で使用するためにヘッダーをインポートする必要がありますか、それとも機能が組み込まれていますか?
2 に答える
いいえ。2 つのプラットフォームの SMS システムの動作は異なります。
Android では、SMS をプログラムで完全に自動的に送信できます。
iOS (および WinPhone) では、SMS メッセージを事前に作成し、システム コンポーネントに渡して (システムによって) メッセージを送信するかどうかを確認するためにユーザーに提示することしかできません。
このためのiOSコードは次のとおりです。
var sms := new MFMessageComposeViewController;
sms.messageComposeDelegate := self;
sms.recipients := ['7275']; // mobile #('s)
sms.body := 'The message to send';
presentViewController(sms) animated(true) completion(nil);
注:このコードは ObjectPascal ですが、RemObjects Oxygeneであり、Cocoa フレームワークに対して直接コンパイルしてネイティブ iOS コードを生成するため、ヘッダーなどをインポートする必要はありません。これを FireMonkey に変換するには、対応する宣言/ヘッダーをDelphi、それらが提供されていると仮定します。
Delphi に変換する場合、このコードのObjective-Cバージョンと比較すると役立つ場合があります。これは、Delphi が Cocoa フレームワーク呼び出しに関連する構文の拡張サポートを提供しないためです。たとえば、Objective-C で受信者プロパティを設定すると、次のようになります。
sms.recipients = [NSArray arrayWithObjects:@"7275", nil];
Delphi への変換を支援するために、違いと上記の Oxygene コードが Objective-C にどのように対応するかについての詳細な説明は、iOS、Android (および WinPhone) 用の SMS ベースのアプリケーションを開発したことについて書いたブログ投稿にあります。
iOSの場合、dpf iosネイティブコントロールを使用してください:)
これは私のテスト済み関数です(宛先番号はオブジェクト自体にあります...)
procedure SEND_SMS(NUMBER, TEXT: string);
{$IFDEF ANDROID}
var SmsManager: JSmsManager;
smsTo, txt: JString;
begin
SmsManager := TJSmsManager.JavaClass.getDefault;
smsTo := StringToJString(NUMBER);
txt := StringToJString(TEXT) ;
SmsManager.sendTextMessage( smsTo, nil, txt, nil, nil);
end;
{$ENDIF}
{$IFDEF iOS}
var sms: TDPFMessageCompose;
begin
sms := TDPFMessageCompose.Create(application);
SMS.MessageCompose( TEXT, [NUMBER] ) ;
sms.free;
end ;
{$ENDIF}
{$IF Defined(MSWINDOWS) }
begin
showmessage( 'sms ');
end;
{$ENDIF}