프로그래밍 방식으로 iPhone에서 SMS를 보내는 방법은 무엇입니까?
공식 SDK / Cocoa Touch를 사용 하여의 프로그래밍 방식으로 SMS 를 보낼 수 있는지 여부와 방법을 아는 사람이 iPhone
있습니까?
제한 사항
iPhone의 프로그램 내에서 SMS를 보낼 수 있다면 백그라운드에서 사람들을 스팸으로 만드는 게임을 작성할 수 있습니다. 당신은 정말로 당신의 친구로부터 스팸을 원한다고 확신합니다, "이 새로운 게임을 시도하십시오! 그것은 내 boxxers를 roxxers하고 당신도 그렇게 될 것입니다! roxxersboxxers.com !!!! 지금 가입하면 3,200 RB를 얻을 것입니다 포인트들!!"
Apple은 자동 (또는 부분적으로 자동화 된) SMS 및 전화 걸기 작업에 대한 제한이 있습니다. (게임이 특정 시간에 911로 전화 한 경우를 상상해보십시오)
가장 좋은 방법은 온라인 SMS 전송 서비스를 사용하는 인터넷에 중간 서버를 설정하고 완전한 자동화가 필요한 경우 해당 경로를 통해 SMS를 보내는 것입니다. (즉, iPhone의 프로그램이 UDP 패킷을 서버로 보내면 실제 SMS가 전송됩니다)
iOS 4 업데이트
그러나 iOS 4는 이제 viewController
응용 프로그램으로 가져올 수 있는 기능 을 제공합니다 . SMS 필드를 미리 채우면 사용자가 컨트롤러 내에서 SMS 전송을 시작할 수 있습니다. "SMS : ..."url 형식을 사용하는 것과 달리 응용 프로그램을 계속 열어두고받는 사람 및 본문 필드 를 모두 채울 수 있습니다 . 여러 수신자를 지정할 수도 있습니다.
따라서 사용자가 명시 적으로 인식하지 않고도 응용 프로그램이 자동 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 서비스로 대체하십시오.
다음은 원하는 것을 정확하게 수행하는 자습서입니다 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
- MessageUI.framework를 Xcode 프로젝트에 추가해야합니다
- 인클루드
#import <MessageUI/MessageUI.h>
헤더 파일을 - 이 대리자를 헤더 파일에 추가하고
MFMessageComposeViewControllerDelegate
&UINavigationControllerDelegate
- 귀하의
IBAction
방법에서MFMessageComposeViewController
say 인스턴스를 선언 하십시오.messageInstance
- 장치가
[MFMessageComposeViewController canSendText]
if 조건에서 텍스트 사용 을 보낼 수 있는지 확인하기 위해 Yes / No를 반환합니다. 에서
if
조건이 작업을 수행합니다당신의 몸을 먼저 설정하십시오
messageInstance
:messageInstance.body = @"Hello from Shah";
그런 다음 메시지 수신자를 다음과 같이 결정하십시오.
messageInstance.recipients = [NSArray arrayWithObjects:@"12345678", @"87654321", nil];
messageInstance의 위임을 다음과 같이 설정하십시오.
messageInstance.messageComposeDelegate = self;
마지막 줄에서 다음을 수행하십시오.
[self presentModalViewController:messageInstance animated:YES];
sms:[target phone number]
URL을 사용하여 SMS 응용 프로그램을 열 수 있지만 SMS 본문에 텍스트를 미리 채우는 방법에 대한 표시는 없습니다.
MacOS의 프로세스 간 통신 시스템 중 하나는 XPC입니다. 이 시스템 계층은 libSystem을 사용하여 plist 구조의 전송을 기반으로 프로세스 간 통신을 위해 개발되었으며 시작되었습니다. 실제로 사전과 같은 구조의 교환을 통해 프로세스를 관리 할 수있는 인터페이스입니다. 유전으로 인해 iOS 5는이 메커니즘도 가지고 있습니다.
이 소개의 의미를 이미 이해했을 것입니다. 그러나 iOS에는 XPC 통신 도구가 포함 된 시스템 서비스가 있습니다. 그리고 SMS 전송을위한 데몬으로 작업을 보여주고 싶습니다. 그러나이 기능은 iOS 6에서 고정되어 있지만 iOS 5.0-5.1.1과 관련이 있습니다. 탈옥, 개인 프레임 워크 및 기타 불법 도구는 악용 될 필요가 없습니다. / usr / include / xpc / * 디렉토리의 헤더 파일 세트 만 필요합니다.
iOS에서 SMS를 전송하기위한 요소 중 하나는 시스템 서비스 com.apple.chatkit입니다.이 작업에는 짧은 문자 메시지 생성, 관리 및 전송이 포함됩니다. 쉽게 제어 할 수 있도록 공개적으로 사용 가능한 통신 포트 com.apple.chatkit.clientcomposeserver.xpc가 있습니다. XPC 서브 시스템을 사용하면 사용자의 승인없이 메시지를 생성하고 보낼 수 있습니다.
글쎄, 연결을 만들어 보자.
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 구성은 일시 중단 된 연결을 만들 수 있도록하기 위해 활성화 단계를 한 단계 더 수행해야합니다.
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를 보냈습니다.
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];
}
이 방법을 사용할 수 있습니다 :
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:MobileNumber"]]
iOS는 앱에서 메시지 앱의 메시지 작성 페이지로 자동 탐색합니다. URL 스킴은 sms :로 시작하므로 메시지 앱에서 인식하고이를 실행하는 유형으로 식별됩니다.
//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];
}
이 절차를 따르십시오
1. MessageUI.Framework
프로젝트에 추가
2. #import <MessageUI/MessageUI.h>
.h 파일로 가져 옵니다.
삼 . 메시지를 보내기 위해이 코드를 복사하십시오.
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];
}
달리고 가자!
iOS에서 SMS를 보내는 Swift 버전의 코드는 다음과 같습니다. 실제 장치에서만 작동합니다. iOS 7 이상에서 코드 테스트되었습니다. 자세한 내용은 여기를 참조 하십시오 .
1) MFMessageComposeViewControllerDelegate 및 NSObject를 상속하는 새 클래스를 작성하십시오.
import Foundation
import MessageUI
class MessageComposer: NSObject, MFMessageComposeViewControllerDelegate {
// A wrapper function to indicate whether or not a text message can be sent from the user's device
func canSendText() -> Bool {
return MFMessageComposeViewController.canSendText()
}
// Configures and returns a MFMessageComposeViewController instance
func configuredMessageComposeViewController(textMessageRecipients:[String] ,textBody body:String) -> MFMessageComposeViewController {
let messageComposeVC = MFMessageComposeViewController()
messageComposeVC.messageComposeDelegate = self // Make sure to set this property to self, so that the controller can be dismissed!
messageComposeVC.recipients = textMessageRecipients
messageComposeVC.body = body
return messageComposeVC
}
// MFMessageComposeViewControllerDelegate callback - dismisses the view controller when the user is finished with it
func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult) {
controller.dismissViewControllerAnimated(true, completion: nil)
}
}
2)이 수업을 이용하는 방법 :
func openMessageComposerHelper(sender:AnyObject ,withIndexPath indexPath: NSIndexPath) {
var recipients = [String]()
//modify your recipients here
if (messageComposer.canSendText()) {
println("can send text")
// Obtain a configured MFMessageComposeViewController
let body = Utility.createInvitationMessageText()
let messageComposeVC = messageComposer.configuredMessageComposeViewController(recipients, textBody: body)
// Present the configured MFMessageComposeViewController instance
// Note that the dismissal of the VC will be handled by the messageComposer instance,
// since it implements the appropriate delegate call-back
presentViewController(messageComposeVC, animated: true, completion: nil)
} else {
// Let the user know if his/her device isn't able to send text messages
self.displayAlerViewWithTitle("Cannot Send Text Message", andMessage: "Your device is not able to send text messages.")
}
}
iOS 4에는 응용 프로그램에서 바디 및 레시피가 포함 된 메시지 전송을 지원하는 클래스가 있습니다. 메일 발송과 동일하게 작동합니다. 여기에서 설명서를 찾을 수 있습니다 : 링크 텍스트
- (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients
{
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
UIImage *ui =resultimg.image;
pasteboard.image = ui;
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:"]];
}
// 이름과 번호로 메소드를 호출합니다.
-(void)openMessageViewWithName:(NSString*)contactName withPhone:(NSString *)phone{
CTTelephonyNetworkInfo *networkInfo=[[CTTelephonyNetworkInfo alloc]init];
CTCarrier *carrier=networkInfo.subscriberCellularProvider;
NSString *Countrycode = carrier.isoCountryCode;
if ([Countrycode length]>0) //Check If Sim Inserted
{
[self sendSMS:msg recipientList:[NSMutableArray arrayWithObject:phone]];
}
else
{
[AlertHelper showAlert:@"Message" withMessage:@"No sim card inserted"];
}
}
// 메시지를 보내는 방법
- (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSMutableArray *)recipients{
MFMessageComposeViewController *controller1 = [[MFMessageComposeViewController alloc] init] ;
controller1 = [[MFMessageComposeViewController alloc] init] ;
if([MFMessageComposeViewController canSendText])
{
controller1.body = bodyOfMessage;
controller1.recipients = recipients;
controller1.messageComposeDelegate = self;
[self presentViewController:controller1 animated:YES completion:Nil];
}
}
원하는 경우 class CoreTelephony
라는 개인 프레임 워크 를 사용할 수 있습니다 CTMessageCenter
. SMS를 보내는 몇 가지 방법이 있습니다.
이것을 사용하십시오 :
- (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];
}
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:number"]]
이것은 최선의 짧은 방법입니다.
MFMessageComposeViewController를 제시하면 SMS를 보낼 수 있지만 사용자 프롬프트 (보내기 버튼을 탭함)가 나타납니다. 사용자의 허락 없이는 그렇게 할 수 없습니다. iOS 11에서는 수신 메일 필터링과 같은 확장 기능을 사용하여 iOS에 스팸을 알리거나 알리지 않을 수 있습니다. SMS로 더 이상 할 수없는 일
자신의 앱에서 메시지 작성 및 전송을 표시 하려면 MFMessageComposeViewController 를 사용해야합니다 .
그렇지 않으면 sharedApplication 메소드를 사용할 수 있습니다 .
참고 URL : https://stackoverflow.com/questions/10848/how-to-programmatically-send-sms-on-the-iphone
'development' 카테고리의 다른 글
Git으로 큰 바이너리 파일 관리 (0) | 2020.02.11 |
---|---|
Java에서 "최종 클래스"의 요점은 무엇입니까? (0) | 2020.02.11 |
StackOverflow의 입력 태그와 같은 jQuery 자동 완성 태그 지정 플러그인? (0) | 2020.02.11 |
반환 유형이없는 기능 위임 (0) | 2020.02.11 |
파이썬에서 YAML 파일을 구문 분석하는 방법 (0) | 2020.02.11 |