วิธีส่ง SMS บน iPhone โดยทางโปรแกรม


526

มีใครรู้บ้างว่าเป็นไปได้และวิธีการส่งSMSจากโปรแกรมiPhoneโดยใช้ SDK / Cocoa Touch อย่างเป็นทางการหรือไม่


ใน Ios 4 คุณสามารถส่ง sms พร้อมรหัสได้ แต่ปัญหาคือใบสมัครของคุณจะถูกปิด
Pankaj Kainthla

หากการใช้ SDK อย่างเป็นทางการไม่ใช่ข้อกำหนดสำหรับคนอื่นฉันเขียนโพสต์นี้เพื่อแสดงวิธีการใช้ Twilio: twilio.com/blog/2016/11/30
Megan Speir

คุณสามารถสร้างสเปรดชีต google จาก gmail ของคุณสร้างฟิลด์ที่คุณต้องการจากนั้นทำtools->script editorและในคำขอ POST ใช้MailApp.sendEmailapi เพื่อส่งอีเมลไปยังหมายเลขโทรศัพท์ att's is YOURNUMBER@mms.att.net tmobile's YOURNUMBER@tmomail.net ฉันคิดว่า (ทั้งหมดฟรี)
Coty Embry

คำตอบ:


404

ข้อ จำกัด

หากคุณสามารถส่ง SMS ภายในโปรแกรมบน iPhone คุณจะสามารถเขียนเกมที่เป็นสแปมคนที่อยู่เบื้องหลัง ฉันแน่ใจว่าคุณต้องการที่จะมี spams จากเพื่อนของคุณ "ลองเกมใหม่นี้! มัน roxxers boxxers ของฉันและของคุณจะเกินไป! roxxersboxxers.com !!!! ถ้าคุณสมัครตอนนี้คุณจะได้รับ 3,200 RB จุด !!"

Apple มีข้อ จำกัด สำหรับการส่ง SMS และการโทรอัตโนมัติ (ลองคิดดูว่าเกมจะหมุนหมายเลข 911 ในเวลาใดวันหนึ่งแทนหรือไม่)

ทางออกที่ดีที่สุดของคุณคือการตั้งค่าเซิร์ฟเวอร์ระดับกลางบนอินเทอร์เน็ตที่ใช้บริการส่ง SMS ออนไลน์และส่ง SMS ผ่านเส้นทางนั้นหากคุณต้องการระบบอัตโนมัติที่สมบูรณ์ (เช่นโปรแกรมของคุณบน iPhone ส่งแพ็กเก็ต UDP ไปยังเซิร์ฟเวอร์ของคุณซึ่งส่ง SMS จริง)

การอัปเดต iOS 4

อย่างไรก็ตามในตอนนี้ iOS 4 จะให้viewControllerคุณสามารถนำเข้าแอพพลิเคชั่นของคุณได้ คุณเติมข้อมูลฟิลด์ SMS ไว้ล่วงหน้าจากนั้นผู้ใช้สามารถเริ่มต้นการส่ง SMS ภายในตัวควบคุม ซึ่งแตกต่างจากการใช้รูปแบบ URL "SMS: ... " สิ่งนี้ช่วยให้แอปพลิเคชันของคุณเปิดอยู่และช่วยให้คุณสามารถเติมทั้งไปยังและช่องเนื้อหา คุณสามารถระบุผู้รับได้หลายคน

วิธีนี้จะป้องกันไม่ให้แอปพลิเคชันส่ง SMS อัตโนมัติโดยที่ผู้ใช้ไม่ทราบ คุณยังไม่สามารถส่ง SMS อัตโนมัติเต็มรูปแบบจาก iPhone เองต้องมีการโต้ตอบกับผู้ใช้ แต่อย่างน้อยที่สุดคุณก็สามารถเติมข้อมูลได้ทุกอย่างและหลีกเลี่ยงการปิดแอปพลิเคชัน

คลาสMFMessageComposeViewController ได้รับการบันทึกไว้เป็นอย่างดีและแบบฝึกหัดแสดงให้เห็นว่าการใช้งานทำได้ง่ายเพียงใด

การอัปเดต iOS 5

iOS 5 มีการส่งข้อความสำหรับอุปกรณ์ iPod touch และ iPad ดังนั้นในขณะที่ฉันยังไม่ได้ทดสอบด้วยตัวเองอาจเป็นไปได้ว่าอุปกรณ์ iOS ทั้งหมดจะสามารถส่ง SMS ผ่าน MFMessageComposeViewController หากเป็นกรณีนี้ Apple กำลังเรียกใช้เซิร์ฟเวอร์ SMS ที่ส่งข้อความในนามของอุปกรณ์ที่ไม่มีโมเด็มมือถือ

iOS 6 การปรับปรุง

ไม่มีการเปลี่ยนแปลงในชั้นเรียนนี้

การอัปเดต iOS 7

ตอนนี้คุณสามารถตรวจสอบเพื่อดูว่าสื่อข้อความที่คุณใช้จะยอมรับเรื่องหรือสิ่งที่แนบมาและสิ่งที่แนบมาจะยอมรับ คุณสามารถแก้ไขหัวเรื่องและเพิ่มสิ่งที่แนบมากับข้อความโดยที่สื่ออนุญาต

การอัปเดต iOS 8

ไม่มีการเปลี่ยนแปลงในชั้นเรียนนี้

การอัปเดต iOS 9

ไม่มีการเปลี่ยนแปลงในชั้นเรียนนี้

iOS 10 ปรับปรุง

ไม่มีการเปลี่ยนแปลงในชั้นเรียนนี้

การอัปเดต iOS 11

ไม่มีการเปลี่ยนแปลงที่สำคัญกับคลาสนี้

ข้อ จำกัด ของคลาสนี้

โปรดทราบว่าสิ่งนี้จะไม่ทำงานบนโทรศัพท์ที่ไม่มี iOS 4 และจะไม่ทำงานบน iPod touch หรือ iPad ยกเว้นบางทีภายใต้ iOS 5 คุณจะต้องตรวจสอบอุปกรณ์และข้อ จำกัด ของ iOS ก่อนใช้งาน คอนโทรลเลอร์หรือเสี่ยงต่อการ จำกัด แอปของคุณเป็น 3G, 3GS และ 4 iPhones ที่เพิ่งอัปเกรด

อย่างไรก็ตามเซิร์ฟเวอร์ระดับกลางที่ส่ง SMS จะอนุญาตให้อุปกรณ์ iOS ใด ๆ และทั้งหมดเหล่านี้สามารถส่ง SMS ได้ตราบใดที่มีการเชื่อมต่ออินเทอร์เน็ตดังนั้นจึงอาจเป็นทางออกที่ดีกว่าสำหรับแอพพลิเคชั่นมากมาย ให้ใช้ทั้งคู่และถอยกลับไปใช้บริการ SMS ออนไลน์เมื่ออุปกรณ์ไม่รองรับเท่านั้น


12
และถ้าคุณซื้อโดเมนนั้นฉันจะไม่สามารถมองคุณในลักษณะเดียวกันได้อีก
Adam Davis

79
ฉันคิดว่ามันน่าขันที่มีคนทำเครื่องหมายโพสต์นี้เป็นสแปม อ่านระหว่างบรรทัดคน!
Randolpho

2
-1 เพราะสิ่งนี้อ่านเป็นการเก็งกำไร นอกจากนี้ยังดูคำตอบ Jus' Wondrin' และ rydgaze เกี่ยวกับวิธีการส่ง SMSes ในแอป
Frank Shearar

8
@Frank - อัปเดตการเขียนของฉันเพื่อให้สอดคล้องกับฟีเจอร์ iOS 4 ใหม่ นำถ้อยคำที่สกปรกออก
Adam Davis

13
ฉันขอขอบคุณที่คุณอัปเดตโพสต์นี้สำหรับเวอร์ชัน iOS ใหม่ :)
Ciryon

143

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


ยังคงรูปแบบ SMS ที่มีการปรากฏขึ้น มีวิธีใดที่จะส่งเป็นแบ็คกราวน์?
Raptor

5
แน่นอนคุณสามารถส่ง SMS ในพื้นหลังใช้บริการเช่น Twilio แต่ถ้าคุณต้องการที่จะส่งไปจากหมายเลขโทรศัพท์ของผู้ใช้พวกเขาจะต้องอนุมัติข้อความผ่านทางวิธีการข้างต้น
Daniel Amitay

3
ทุกคนที่ใช้โค้ดข้างต้นอาจต้องการที่จะต้องพิจารณาวางMFMessageComposeViewController *controller = ...ภายในถ้าบล็อก (วิธีการเรียนไม่จำเป็นต้องมีตัวอย่างในการทำแบบทดสอบ)
unsynchronized

การเชื่อมโยงhttp://blog.mugunthkumar.com/coding/iphone-tutorial-how-to-send-in-app-sms/ว่า "502 Bad เกตเวย์" บนแล็ปท็อปของฉัน บางทีลิงก์เสีย
Nikita Vlasenko

99
  1. คุณต้องเพิ่ม MessageUI.framework เข้ากับโครงการ Xcode ของคุณ
  2. รวม#import <MessageUI/MessageUI.h>ไว้ในไฟล์ส่วนหัวของคุณ
  3. เพิ่มผู้แทนเหล่านี้ไปยังไฟล์ส่วนหัวของคุณMFMessageComposeViewControllerDelegate และUINavigationControllerDelegate
  4. ในIBActionวิธีการของคุณประกาศตัวอย่างของการMFMessageComposeViewControllerพูดmessageInstance
  5. ในการตรวจสอบว่าอุปกรณ์ของคุณสามารถส่งข้อความใช้[MFMessageComposeViewController canSendText]ในเงื่อนไข if หรือไม่อุปกรณ์จะส่งคืนใช่ / ไม่ใช่
  6. ในifสภาพที่ทำเหล่านี้:

    1. ชุดแรกสำหรับร่างกายของคุณ messageInstanceเป็น:

      messageInstance.body = @"Hello from Shah";
    2. จากนั้นเลือกผู้รับสำหรับข้อความว่า:

      messageInstance.recipients = [NSArray arrayWithObjects:@"12345678", @"87654321",         nil];
    3. ตั้งผู้รับมอบสิทธิ์เป็นข้อความของคุณอินสแตนซ์เป็น:

      messageInstance.messageComposeDelegate = self;
    4. ในบรรทัดสุดท้ายทำสิ่งนี้:

      [self presentModalViewController:messageInstance animated:YES];

2
หมายเหตุรุ่น: presentModalViewController:animated:เลิกใช้แล้ว; ใช้presentViewController:animated:completion:แทน นอกจากนี้อย่าลืมกำหนดวิธีการมอบสิทธิ์- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)resultหากคุณต้องการทราบผลลัพธ์
Raptor

กรุณาใส่รหัสเพื่อทดสอบ @Najeebullah Shah ที่นี่หรือใน GitHub

50

คุณสามารถใช้sms:[target phone number]URL เพื่อเปิดแอปพลิเคชัน SMS ได้ แต่ไม่มีข้อบ่งชี้ว่าจะเติมข้อความ SMS ล่วงหน้าด้วยข้อความได้อย่างไร


react-native-communication ใช้พารามิเตอร์ & body = เพื่อเติมข้อความล่วงหน้าเมื่อเปิด SMS: targetphonenumber & body = textyouwanttoprefill สำหรับ iOS
Doug Voss

ฉันเพิ่งลองสิ่งนี้บน iphone 8 ของฉันและมันใช้งานได้ดี ... ขอบคุณ!
Brad Parks

ฉันต้องการส่ง SMS ไปยังหมายเลขเฉพาะ แต่ด้วยข้อความเนื้อหาที่กำหนดไว้ล่วงหน้า (prefill) ข้อความเนื้อหานั้นควรจะเลือกด้วยตนเองจาก 4 ตัวเลือกที่เป็นไปได้ เช่นแอปเปิดขึ้นและป๊อปอัป "เลือกเหตุผล" จากนั้นมี 4 ตัวเลือก ถัดไปผู้ใช้เลือกหนึ่งใน 4 ตัวเลือกเหล่านี้จากนั้น SMS อัตโนมัติจะถูกส่งโดยมีข้อความเป็นตัวเลือกของผู้ใช้ เคล็ดลับใด ๆ
seralouk

25

หนึ่งในระบบการสื่อสารระหว่างกระบวนการใน MacOS คือ XPC ชั้นของระบบนี้ได้รับการพัฒนาสำหรับการสื่อสารระหว่างกระบวนการตามการถ่ายโอนโครงสร้าง plist โดยใช้ libSystem และ launchd ในความเป็นจริงมันเป็นอินเตอร์เฟซที่ช่วยให้กระบวนการจัดการผ่านการแลกเปลี่ยนของโครงสร้างเช่นพจนานุกรม เนื่องจากพันธุกรรม, iOS 5 มีกลไกนี้เช่นกัน

คุณอาจเข้าใจสิ่งที่ฉันหมายถึงโดยการแนะนำนี้ ใช่มีบริการระบบใน iOS ที่มีเครื่องมือสำหรับการสื่อสาร XPC และฉันต้องการเป็นตัวอย่างการทำงานกับ daemon สำหรับการส่ง SMS อย่างไรก็ตามควรกล่าวว่าความสามารถนี้ได้รับการแก้ไขใน iOS 6 แต่เกี่ยวข้องกับ iOS 5.0—5.1.1 ไม่จำเป็นต้อง Jailbreak, Private Framework และเครื่องมือผิดกฎหมายอื่น ๆ เฉพาะชุดไฟล์ส่วนหัวจากไดเร็กทอรี / usr / include / xpc / * เท่านั้นที่จำเป็น

หนึ่งในองค์ประกอบสำหรับการส่ง SMS ใน iOS คือบริการระบบ 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 แล้ว


1
คุณไม่ควรใช้ XPC เพื่อส่ง SMS แอปที่ผลิตจะไม่ได้รับการอนุมัติจาก Apple ใช้ MessageUI กรอบแทน
Raptor

หากคุณกำลังใช้ techinique นี้สำหรับแอพที่คุณใช้สำหรับองค์กรของคุณและแอพไม่ผ่านแอพสโตร์คุณไม่ต้องกังวล
Martin Berger

สิ่งนี้ใช้ได้กับ iOS เวอร์ชัน 10+ หรือไม่
Martin Berger

รับ "ข้อผิดพลาดการเชื่อมต่อแซนด์บ็อกซ์ XPC: การเชื่อมต่อไม่ถูกต้อง" บน iOS 12
Martin Berger

23

เพิ่ม 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];
 }

เฮ้มันยอดเยี่ยม แต่เราสามารถทำฟังก์ชั่นนี้จากพื้นหลังได้ไหม
ราชา

3
Apple จะไม่อนุญาตให้คุณส่งข้อความโดยไม่ได้รับการอนุมัติจากผู้ใช้ เขาต้องส่งข้อความ / จดหมายโดยกดปุ่มด้วยตนเอง หรือคุณสามารถใช้บริการที่กำหนดเองได้โดยส่งอีเมล / หมายเลขไปที่แบ็กเอนด์แล้วส่ง แม้ว่าคุณจะไม่สามารถทำสิ่งนี้ได้โดยตรงบน iPhone
Bharat Gulati

21

คุณสามารถใช้วิธีนี้:

[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:MobileNumber"]]


iOS จะนำทางจากแอปของคุณไปยังหน้าการเขียนข้อความของแอปโดยอัตโนมัติ เนื่องจากรูปแบบของ URL เริ่มต้นด้วย sms: สิ่งนี้ถูกระบุว่าเป็นประเภทที่แอปข้อความรู้จักและเปิดใช้


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

คุณควรจะเห็นลิงค์นี้: blog.mugunthkumar.com/coding/… มันจะช่วยคุณได้
Banker Mittal

12

ทำตามขั้นตอนนี้

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

วิ่งและไป!


มูลค่าการกล่าวขวัญว่าคุณอาจจะต้องการที่จะทำงาน[self dismissViewControllerAnimated:YES completion:nil];ภายในmessageComposeViewController: didFinishWithResult:วิธีการโทรกลับ มิฉะนั้นมันก็จะไปแขวนที่นั่น
SaltyNuts

5

นี่คือรหัส Swift ที่จะส่ง SMS ใน iOS โปรดสังเกตว่ามันใช้งานได้กับอุปกรณ์จริงเท่านั้น รหัสผ่านการทดสอบใน 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.")
    }
}

3

มีคลาสใน iOS 4 ซึ่งรองรับการส่งข้อความกับเนื้อหาและผู้รับจากแอปพลิเคชันของคุณ มันทำงานเหมือนกับการส่งจดหมาย คุณสามารถค้นหาเอกสารได้ที่นี่: ลิงค์ข้อความ


3
- (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients
{
    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
    UIImage *ui =resultimg.image;
    pasteboard.image = ui;
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:"]];
}

4
พารามิเตอร์ของคุณมีประโยชน์อย่างไร
martinsurleweb

[[UIApplication sharedApplication] openURL: [NSURL URLWithString: @ "sms:"]];
Amr Angry

3

// วิธีการโทรด้วยชื่อและหมายเลข

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

2

หากคุณต้องการคุณสามารถใช้กรอบงานส่วนตัวCoreTelephonyที่เรียกว่าCTMessageCenterคลาส มีวิธีส่ง SMS ไม่กี่วิธี


1
เขาถามโดยเฉพาะว่าสิ่งนี้เป็นไปได้โดยใช้ SDK อย่างเป็นทางการ
Quentamia

1
คุณสามารถให้ข้อมูลเพิ่มเติมเกี่ยวกับ API ส่วนตัวได้หรือไม่ ฉันไม่มีปัญหาในการใช้เฟรมเวิร์กส่วนตัวเนื่องจากฉันไม่ต้องการเผยแพร่ไปยัง App Store
Bagusflyer

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

1
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:number"]] 

นี่จะเป็นวิธีที่ดีและสั้นที่สุดที่จะทำ


1

คุณสามารถแสดง MFMessageComposeViewController ซึ่งสามารถส่ง SMS แต่ด้วยพรอมต์ของผู้ใช้ (เขาแตะที่ปุ่มส่ง) ไม่มีทางที่จะทำโดยไม่ได้รับอนุญาตจากผู้ใช้ บน iOS 11 คุณสามารถสร้างส่วนขยายที่เป็นเหมือนตัวกรองข้อความขาเข้าบอก iOS ว่าเป็นสแปมหรือไม่ ไม่สามารถทำอะไรกับ SMS ได้อีก


คำตอบใหม่!
Fattie

0

คุณต้องใช้MFMessageComposeViewControllerหากคุณต้องการแสดงการสร้างและส่งข้อความในแอพของคุณเอง

มิฉะนั้นคุณสามารถใช้วิธีsharedApplication

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.