ios - आईफोन पर प्रोग्रामेटिक रूप से एसएमएस कैसे भेजें?




objective-c cocoa-touch (13)

प्रतिबंध

यदि आप आईफोन पर किसी प्रोग्राम के भीतर एक एसएमएस भेज सकते हैं, तो आप पृष्ठभूमि में लोगों को स्पैम करने वाले गेम लिख सकेंगे। मुझे यकीन है कि आप वास्तव में अपने दोस्तों से स्पैम रखना चाहते हैं, "इस नए गेम को आजमाएं! यह मेरे बॉक्सक्सर्स को रोक्सक्स करता है, और तुम्हारा भी होगा! Roxxersboxxers.com !!!! अगर आप अभी साइन अप करते हैं तो आपको 3,200 आरबी मिलेगा अंक !! "

ऐप्पल के पास स्वचालित (या यहां तक ​​कि आंशिक रूप से स्वचालित) एसएमएस और डायलिंग ऑपरेशन के लिए प्रतिबंध हैं। (कल्पना करें कि खेल के बजाय दिन के किसी विशेष समय पर 911 डायल किया गया था)

आपकी सबसे अच्छी शर्त इंटरनेट पर एक इंटरमीडिएट सर्वर स्थापित करना है जो एक ऑनलाइन एसएमएस भेजने सेवा का उपयोग करता है, और यदि आपको पूर्ण स्वचालन की आवश्यकता है तो उस मार्ग के माध्यम से एसएमएस भेजें। (यानी, आईफोन पर आपका प्रोग्राम आपके सर्वर पर यूडीपी पैकेट भेजता है, जो वास्तविक एसएमएस भेजता है)

आईओएस 4 अपडेट

हालांकि, आईओएस 4 अब एक व्यू कंट्रोलर प्रदान करता है जिसे आप अपने आवेदन में आयात कर सकते हैं। आप एसएमएस फ़ील्ड को पूर्ववत करते हैं, फिर उपयोगकर्ता नियंत्रक के भीतर एसएमएस भेज सकता है। "एसएमएस: ..." यूआरएल प्रारूप का उपयोग करने के विपरीत, यह आपके एप्लिकेशन को खुला रहने की अनुमति देता है, और आपको शरीर और शरीर दोनों क्षेत्रों को पॉप्युलेट करने की अनुमति देता है। आप कई प्राप्तकर्ता भी निर्दिष्ट कर सकते हैं।

यह एप्लिकेशन को स्वचालित रूप से इसके बारे में जागरूक किए बिना स्वचालित एसएमएस भेजने से रोकता है। आप अभी भी आईफोन से पूरी तरह से स्वचालित एसएमएस नहीं भेज सकते हैं, इसके लिए कुछ उपयोगकर्ता इंटरैक्शन की आवश्यकता है। लेकिन यह कम से कम आपको सब कुछ पॉप्युलेट करने की अनुमति देता है, और एप्लिकेशन को बंद करने से बचाता है।

MFMessageComposeViewController क्लास अच्छी तरह से प्रलेखित है, और tutorials दिखाते हैं कि इसे कार्यान्वित करना कितना आसान है।

आईओएस 5 अपडेट

आईओएस 5 में आईपॉड टच और आईपैड डिवाइस के लिए मैसेजिंग शामिल है, इसलिए जब तक मैंने अभी तक इसका परीक्षण नहीं किया है, तो हो सकता है कि सभी आईओएस डिवाइस एमएफएमसेज कॉमपॉइस व्यू कंट्रोलर के माध्यम से एसएमएस भेज सकें। यदि ऐसा है, तो ऐप्पल एक एसएमएस सर्वर चला रहा है जो उन उपकरणों की तरफ से संदेश भेजता है जिनमें सेलुलर मॉडेम नहीं है।

आईओएस 6 अपडेट

इस वर्ग में कोई बदलाव नहीं है।

आईओएस 7 अपडेट

अब आप यह देखने के लिए जांच सकते हैं कि आप जिस संदेश माध्यम का उपयोग कर रहे हैं वह एक विषय या अनुलग्नक स्वीकार करेगा, और यह किस तरह के अनुलग्नक स्वीकार करेगा। आप विषय को संपादित कर सकते हैं और संदेश में अनुलग्नक जोड़ सकते हैं, जहां माध्यम इसे अनुमति देता है।

आईओएस 8 अपडेट

इस वर्ग में कोई बदलाव नहीं है।

आईओएस 9 अपडेट

इस वर्ग में कोई बदलाव नहीं है।

आईओएस 10 अपडेट

इस वर्ग में कोई बदलाव नहीं है।

आईओएस 11 अपडेट

इस वर्ग में कोई महत्वपूर्ण बदलाव नहीं है

इस वर्ग के लिए सीमाएं

ध्यान रखें कि यह आईओएस 4 के बिना फोन पर काम नहीं करेगा, और यह आईओएस टच या आईपैड पर काम नहीं करेगा, सिवाय इसके कि, शायद आईओएस 5 के तहत। आपको या तो इसका उपयोग करने से पहले डिवाइस और आईओएस सीमाएं का पता लगाना चाहिए नियंत्रक, या हाल ही में 3 जी, 3 जीएस, और 4 आईफोन को अपग्रेड करने के लिए आपके ऐप को प्रतिबंधित करने का जोखिम।

हालांकि, एक इंटरमीडिएट सर्वर जो एसएमएस भेजता है, इन सभी आईओएस उपकरणों को तब तक एसएमएस भेजने की अनुमति देगा जब तक उनके पास इंटरनेट एक्सेस हो, इसलिए यह कई अनुप्रयोगों के लिए एक बेहतर समाधान हो सकता है। वैकल्पिक रूप से, दोनों का उपयोग करें, और जब डिवाइस इसका समर्थन नहीं करता है तो केवल ऑनलाइन एसएमएस सेवा पर वापस आना।

क्या कोई यह जानता है कि यह संभव है, और आधिकारिक एसडीके / कोको टच के साथ, iPhone से प्रोग्रामेटिक रूप से एसएमएस भेजने के लिए कैसे?


  1. आपको अपने Xcode प्रोजेक्ट में MessageUI.framework जोड़ना होगा
  2. अपनी हेडर फ़ाइल में #import <MessageUI/MessageUI.h> शामिल करें
  3. इन प्रतिनिधियों को अपनी हेडर फ़ाइल में जोड़ें MFMessageComposeViewControllerDelegate और UINavigationControllerDelegate
  4. आपकी MFMessageComposeViewController विधि में MFMessageComposeViewController उदाहरण घोषित करें MFMessageComposeViewController messageInstance
  5. यह जांचने के लिए कि क्या आपकी डिवाइस किसी भी स्थिति में टेक्स्ट उपयोग [MFMessageComposeViewController canSendText] भेज सकती है, यह वापस हां / नहीं
  6. if स्थिति में ये करते हैं:

    1. आपके messageInstance लिए पहला सेट बॉडी messageInstance प्रकार है:

      messageInstance.body = @"Hello from Shah";
      
    2. फिर संदेश के लिए प्राप्तकर्ताओं को इस प्रकार तय करें:

      messageInstance.recipients = [NSArray arrayWithObjects:@"12345678", @"87654321",         nil];
      
    3. अपने संदेश में एक प्रतिनिधि सेट करें इस प्रकार के रूप में:

      messageInstance.messageComposeDelegate = self;
      
    4. आखिरी पंक्ति में यह करें:

      [self presentModalViewController:messageInstance animated:YES];
      

आईओएस 4 में एक कक्षा है जो आपके आवेदन से शरीर और व्यंजनों के साथ संदेश भेजने का समर्थन करती है। यह मेल भेजने के समान काम करता है। आप यहां प्रलेखन पा सकते हैं: लिंक टेक्स्ट


आईओएस में एसएमएस भेजने के लिए कोड का स्विफ्ट संस्करण यहां दिया गया है। कृपया ध्यान दें कि यह केवल वास्तविक उपकरणों में काम करता है। आईओएस 7+ में कोड का परीक्षण किया गया। आप here और पढ़ सकते हैं।

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.")
    }
}

आप इस दृष्टिकोण का उपयोग कर सकते हैं:

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


आईओएस स्वचालित रूप से आपके ऐप से संदेश ऐप के संदेश लिखने वाले पेज पर नेविगेट करेगा। चूंकि यूआरएल की योजना एसएमएस के साथ शुरू होती है :, इसे एक प्रकार के रूप में पहचाना जाता है जिसे संदेश ऐप द्वारा पहचाना जाता है और इसे लॉन्च करता है।


इसे इस्तेमाल करो:

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

बहुत सारे जवाब लेकिन अगर आपको वास्तव में एसएमएस स्वचालित रूप से करने की आवश्यकता है और संगीतकार का उपयोग नहीं करना है, तो आप बस twilio api को कॉल कर सकते हैं।

और यहां किसी भी ऐप से एसएमएस भेजने के लिए 50+ एपीआई के साथ एक सूची है।


मैकोज़ में इंटर-प्रोसेस संचार की प्रणालियों में से एक एक्सपीसी है। इस सिस्टम परत को libSystem और लॉन्च किए गए प्लिस्ट संरचनाओं के हस्तांतरण के आधार पर अंतर-प्रक्रिया संचार के लिए विकसित किया गया है। वास्तव में, यह एक इंटरफेस है जो ऐसी संरचनाओं के आदान-प्रदान के माध्यम से शब्दकोशों को प्रबंधित करने की अनुमति देता है। आनुवंशिकता के कारण, आईओएस 5 में भी इस तंत्र का अधिकार है।

आप पहले ही समझ सकते हैं कि इस परिचय से मेरा क्या मतलब है। हां, आईओएस में सिस्टम सेवाएं हैं जिनमें XPC संचार के लिए टूल शामिल हैं। और मैं एसएमएस भेजने के लिए काम को डिमन के साथ उदाहरण देना चाहता हूं। हालांकि, यह उल्लेख किया जाना चाहिए कि यह क्षमता आईओएस 6 में तय की गई है, लेकिन आईओएस 5.0-5.1.1 के लिए प्रासंगिक है। जेलबैक, निजी ढांचा, और अन्य अवैध उपकरण इसके शोषण के लिए आवश्यक नहीं हैं। निर्देशिका / usr / include / xpc / * से केवल हेडर फ़ाइलों का सेट आवश्यक है।

आईओएस में एसएमएस भेजने के लिए तत्वों में से एक सिस्टम सेवा 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);

अब हमारे पास एक्सपीसी कनेक्शन myConnection एसएमएस भेजने की सेवा पर सेट है। हालांकि, एक्सपीसी कॉन्फ़िगरेशन निलंबित कनेक्शन बनाने के लिए प्रदान करता है - हमें सक्रियण के लिए एक और कदम उठाने की आवश्यकता है।

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);

कनेक्शन सक्रिय है। इस समय आईओएस 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_connection_send_message(myConnection, mydict);
xpc_connection_send_barrier(myConnection, ^{
NSLog(@"The message has been successfully delivered");
});

बस इतना ही। एसएमएस भेजा गया।


यदि आप चाहते हैं, तो आप निजी फ्रेमवर्क CoreTelephony उपयोग कर सकते हैं जिसे CTMessageCenter क्लास कहा जाता है। एसएमएस भेजने के लिए कुछ तरीके हैं।


यहां एक ट्यूटोरियल है जो आप जो खोज रहे हैं वह करता है: MFMessageComposeViewController

tutorials

अनिवार्य रूप से:

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


इस प्रक्रिया का पालन करें

1। MessageUI.Framework लिए MessageUI.Framework MessageUI.Framework

2। .h फ़ाइल में #import <MessageUI/MessageUI.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];
}

भागो और जाओ!


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

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

यह करने का यह सबसे अच्छा और छोटा तरीका होगा।








sms