ios اعدادات - كيفية إرسال الرسائل القصيرة برمجيا على iPhone؟




حل التسليم (17)

يمكنك استخدام رسالة نصية sms:[target phone number] عنوان URL sms:[target phone number] لفتح تطبيق الرسائل القصيرة SMS ، ولكن لا توجد مؤشرات على كيفية ملاءمة نص SMS بشكل مسبق مع النص (راجع هذه المشاركة في منتديات مطوري Apple).

هل يعرف أي شخص ما إذا كان ذلك ممكنًا ، وكيف ، لإرسال رسالة نصية من جهاز iPhone ، مع SDK / Cocoa Touch الرسمي؟


اتبع هذه الإجراءات

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

تشغيل و اذهب!


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

هذا سيكون أفضل وأفضل طريقة للقيام بذلك.


يمكنك استخدام هذا النهج:

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


ستنتقل خدمة iOS تلقائيًا من تطبيقك إلى صفحة إنشاء رسالة تطبيق الرسائل. نظرًا لأن نظام عنوان URL يبدأ بـ sms: ، يتم تعريفه على أنه نوع يتعرف عليه تطبيق الرسائل ويطلقه.


قيود

إذا كان بإمكانك إرسال رسالة قصيرة SMS ضمن برنامج على iPhone ، فستتمكن من كتابة الألعاب التي ترسل رسائل غير مرغوب فيها إلى الأشخاص في الخلفية. أنا متأكد من أنك تريد فعلًا الحصول على رسائل غير مرغوب فيها من أصدقائك ، "جرب هذه اللعبة الجديدة! ستتمكّن من تجربة boxersers ، وستكون كذلك! roxxersboxxers.com !!!! إذا قمت بالتسجيل الآن فستحصل على 3،200 RB نقاط!!"

تفرض شركة Apple قيودًا على عمليات الرسائل القصيرة والاتصال التلقائي (أو حتى المؤتمتة جزئيًا). (تخيل لو أن اللعبة طلبت 911 بدلاً من ذلك في وقت معين من اليوم)

أفضل رهان هو إعداد خادم وسيط على الإنترنت يستخدم خدمة إرسال رسائل عبر الإنترنت ، وإرسال الرسائل القصيرة عبر هذا المسار إذا كنت بحاجة إلى أتمتة كاملة. (على سبيل المثال ، يرسل برنامجك على iPhone حزمة UDP إلى خادمك ، والتي ترسل الرسالة النصية القصيرة الحقيقية)

تحديث iOS 4

على الرغم من ذلك ، يوفر نظام iOS 4 الآن جهازًا للتحكم في المشاهدة يمكنك استيراده إلى تطبيقك. تقوم بتعبئة حقول الرسائل القصيرة ، ثم يمكن للمستخدم بدء إرسال الرسائل القصيرة داخل وحدة التحكم. على عكس استخدام تنسيق "sms: ..." url ، فإن هذا يسمح للتطبيق الخاص بك بالبقاء مفتوحًا ، ويسمح لك بملء الحقلين الأساسي والهيئة . يمكنك حتى تحديد عدة مستلمين.

هذا يمنع التطبيقات من إرسال الرسائل القصيرة التلقائية دون أن يعلم المستخدم صراحة بذلك. لا يزال يتعذر عليك إرسال رسائل SMS مؤتمتة بالكامل من iPhone نفسه ، فهو يتطلب بعض تفاعل المستخدم. ولكن هذا على الأقل يسمح لك بملء كل شيء ، وتجنب إغلاق التطبيق.

يتم MFMessageComposeViewController فئة MFMessageComposeViewController بشكل جيد ، MFMessageComposeViewController tutorials مدى سهولة التنفيذ.

تحديث iOS 5

يشتمل نظام iOS 5 على رسائل لأجهزة iPod touch و iPad ، لذلك لم أختبر هذا بنفسي حتى الآن ، فقد يكون من الممكن أن ترسل جميع الأجهزة التي تعمل بنظام iOS الرسائل القصيرة عبر 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 أجهزة التي تمت ترقيتها مؤخرًا.

ومع ذلك ، فإن الخادم الوسيط الذي يرسل الرسائل النصية القصيرة سيسمح لأي من هذه الأجهزة وجميع أجهزة iOS بإرسال رسائل قصيرة طالما أنها تتمتع بالوصول إلى الإنترنت ، لذلك قد لا يزال هناك حل أفضل للعديد من التطبيقات. بدلاً من ذلك ، استخدم كليهما ، وفقط الرجوع إلى خدمة الرسائل القصيرة عبر الإنترنت عندما لا يدعمها الجهاز.


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

إذا كنت تريد ، يمكنك استخدام الإطار الخاص CoreTelephony الذي يسمى CTMessageCenter . هناك عدة طرق لإرسال الرسائل القصيرة.


إضافة 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];
 }

هناك فصل دراسي في 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];
 }
}

هناك الكثير من الإجابات ولكن إذا كنت تحتاج بالفعل إلى SmS تلقائيًا ولا تستخدم الملحن ، فيمكنك ببساطة الاتصال بـ twilio api.

وإليك قائمة تحتوي على 50+ api لإرسال الرسائل القصيرة من معظمها من أي تطبيق.


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

أحد أنظمة الاتصالات بين العمليات في MacOS هو XPC. لقد تم تطوير طبقة النظام هذه للتواصل بين العمليات على أساس نقل هياكل Plist باستخدام libSystem و launchd. في الواقع ، هي واجهة تسمح بإدارة العمليات من خلال تبادل هياكل مثل القواميس. نظرًا للوراثة ، تمتلك iOS 5 هذه الآلية أيضًا.

قد تفهم بالفعل ما أعنيه بهذه المقدمة. نعم ، هناك خدمات نظام في iOS تتضمن أدوات للاتصال بـ XPC. وأريد أن أجسد العمل مع daemon لإرسال الرسائل النصية القصيرة. ومع ذلك ، تجدر الإشارة إلى أن هذه القدرة ثابتة في نظام iOS 6 ، ولكنها ذات صلة بـ iOS 5.0—5.1.1. ليس مطلوبًا الهروب من السجن والإطار الخاص وغير ذلك من الأدوات غير القانونية لاستغلاله. مطلوب فقط مجموعة ملفات الرأس من الدليل / 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 لتعيين خدمة إرسال الرسائل القصيرة. ومع ذلك ، يوفر تكوين 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");
});

هذا كل شئ. الرسائل القصيرة المرسلة.


يمكنك تقديم MFMessageComposeViewController ، والذي يمكنه إرسال الرسائل القصيرة ، ولكن مع مطالبة المستخدم (يقوم بالنقر على زر الإرسال). لا سبيل إلى القيام بذلك دون إذن المستخدم. في نظام التشغيل iOS 11 ، يمكنك إنشاء ملحق ، يمكن أن يكون مثل فلتر للرسائل الواردة ، وإخبار نظام iOS إما به محتوى غير مرغوب فيه أو لا. لا شيء أكثر من 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];
}

يمكن القيام بذلك في 3 أسطر من الكود :

// grab the window frame and adjust it for orientation
UIView *rootView = [[[UIApplication sharedApplication] keyWindow] 
                                   rootViewController].view;
CGRect originalFrame = [[UIScreen mainScreen] bounds];
CGRect adjustedFrame = [rootView convertRect:originalFrame fromView:nil];






ios objective-c cocoa-touch sms