Frage

Wie kann ich eine SMS -Nachricht programmatisch aus einer iPhone -App senden? Ich verwende Twilio gerade und kann eine HTTP -Anforderung korrekt einrichten, sich mit dem Server authentifizieren und eine Antwort erhalten.

Die HTTP -Headers muss eine Missverständnis geben, da ich eine Antwort von den Twilio -Servern erhalten kann, aber nie die richtigen Daten durchgibt.

Mein aktueller Code befindet sich in einer Methode, die von einer einfachen Taste aufgerufen wird.

- (IBAction)sendButtonPressed:(id)sender {
 NSLog(@"Button pressed.");

 NSString *kYourTwillioSID = @"AC8c3...f6da3";
 NSString *urlString = [NSString stringWithFormat:@"https://AC8c3...6da3:bf...0b7@api.twilio.com/2010-04-01/Accounts/%@/SMS/Messages", kYourTwillioSID];
 NSURL *url = [NSURL URLWithString:urlString];
 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
 [request setURL:url];
 [request setValue:@"+18584334333" forHTTPHeaderField:@"From"];
 [request setValue:@"+13063707780" forHTTPHeaderField:@"To"];
 [request setValue:@"Hello\n" forHTTPHeaderField:@"Body"];

 NSError *error;
 NSURLResponse *response;
 NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

 if (!error) {
    NSString *response_details = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
    NSLog(@"%@",response_details);

 }
 NSLog(@"Request finished %@", error);
War es hilfreich?

Lösung

Wenn Sie nur eine SMS -Nachricht in iOS senden möchten, können Sie die verwenden MFMessageComposeViewController Innen des MessageUI.framework. Wie Sie jedoch wissen, erfordert dies Benutzer-Interaktion.

Wie Sie angefordert haben, können Sie Twilio verwenden, um SMS direkt mit fast jeder Plattform zu senden. Für iOS können Sie den folgenden Swift -Code verwenden, um auf die Twilio -API zu klicken und alle Textnachrichten zu senden, die Sie möchten:

func tappedSendButton() {
    print("Tapped button")

    // Use your own details here
    let twilioSID = "AC8c3...6da3"
    let twilioSecret = "bf2...b0b7"
    let fromNumber = "4152226666"
    let toNumber = "4153338888"
    let message = "Hey"

    // Build the request
    let request = NSMutableURLRequest(URL: NSURL(string:"https://\(twilioSID):\(twilioSecret)@api.twilio.com/2010-04-01/Accounts/\(twilioSID)/SMS/Messages")!)
    request.HTTPMethod = "POST"
    request.HTTPBody = "From=\(fromNumber)&To=\(toNumber)&Body=\(message)".dataUsingEncoding(NSUTF8StringEncoding)

    // Build the completion block and send the request
    NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data, response, error) in
        print("Finished")
        if let data = data, responseDetails = NSString(data: data, encoding: NSUTF8StringEncoding) {
            // Success 
            print("Response: \(responseDetails)")
        } else {
            // Failure
            print("Error: \(error)")
        }
    }).resume()

Für jede weitere API -Interaktion können Sie sich die offiziellen Dokumente ansehen: https://www.twilio.com/docs/api/rest

Andere Tipps

Ok, ich glaube, ich hatte Recht mit den Header.

Ich fand diese Antwort, die sie zu bestätigen scheint: iOS: Wie führt ich eine HTTP -Postanfrage aus?

Sie müssen die Postdaten im Körper der Anfrage senden, nicht in den Kopfzeilen. Twilio erhält Ihren HTTP -Anruf, aber die Postdaten sind leer.

Lassen Sie mich wissen, ob das funktioniert.

Verwenden Sie AFNetworking, um die Anfrage zu senden.

NSString *kTwilioSID = @"AC73bb270.......4d418cb8";
NSString *kTwilioSecret = @"335199.....9";
NSString *kFromNumber = @"+1......1";
NSString *kToNumber = @"+91.......8";
NSString *kMessage = @"Hi";

NSString *urlString = [NSString
stringWithFormat:@"https://%@:%@@api.twilio.com/2010-04-01/Accounts/%@/SMS/Messages/",
kTwilioSID, kTwilioSecret,kTwilioSID];

NSDictionary*
dic=@{@"From":kFromNumber,@"To":kToNumber,@"Body":kMessage};

__block NSArray* jsonArray;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer=[AFHTTPResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes=[NSSet setWithObject:@"application/xml"];
[manager POST:urlString parameters:para success:^(AFHTTPRequestOperation *operation, id responseObject)
    {
        NSError* err;
        NSLog(@"success %@",[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
        jsonArray=[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments
error:&err];
        [_del getJsonResponsePOST:jsonArray];

    } failure:^(AFHTTPRequestOperation *operation, NSError *error)
    {
        [_del getError:[NSString stringWithFormat:@"%@",error]];
    }];

Es könnte das sein:

Die Nummer +Ihr Bedarf ist nicht überprüft. Testkonten können keine Nachrichten an nicht überprüfte Nummern senden. Überprüfen Sie +Ihr Bedarf bei twilio.com/user/account/phone-numbers/verified, oder kaufen Sie eine Twilio -Nummer, um Nachrichten an nicht überprüfte Nummern zu senden.

Dämmerung mit Swift 2.2+, Alamofire, Swiftyjson -> Antwort:

import Alamofire
import SwiftyJSON
........
........
//twillio config
private static let TWILIO_ACCOUNT_SID = "A...7"
private static let TWILIO_AUTH_TOKEN = "6...5"
//end url string is .json,to get response as JSON
static let URL_TWILIO_SMS = "https://\(TWILIO_ACCOUNT_SID):\(TWILIO_AUTH_TOKEN)@api.twilio.com/2010-04-01/Accounts/\(TWILIO_ACCOUNT_SID)/SMS/Messages.json"


Alamofire.request(.POST, URL_TWILIO_SMS, parameters: ["To":"+880....6","From":"+1...9","Body":"Hellow Rafsun"])


        .responseJSON { response in

            if let jso = response.result.value {

                let json = JSON(jso)

                //Twilio response
                if let twStatus = json["status"].string,twSentMessage = json["body"].string where twStatus == "queued"{
                //Twilio message sent
                }else{
                //Twilio message not sent
                }

            }else if let error = response.result.error?.localizedDescription{
                //parse error
            }
    }

Ein Beispiel (aktualisiert) für Xcode 8 und Swift 3.

https://www.twilio.com/blog/2016/11/how-to-send-an-sms-from-ios-in-swift.html

Wir empfehlen nicht, Ihre Anmeldeinformationen Client-Seite zu speichern. Der Beitrag zeigt Ihnen daher, wie Sie eine potenzielle Sicherheitsanfälligkeit anhand einer serverseitigen Sprache Ihrer Auswahl und der Auswahl und dessen vermeiden können. Alamofire Für HTTP -Anfragen:

@IBAction func sendData(sender: AnyObject) { 
    let headers = [
        "Content-Type": "application/x-www-form-urlencoded"
    ]

    let parameters: Parameters = [
        "To": phoneNumberField.text ?? "",
        "Body": messageField.text ?? ""
    ]

    Alamofire.request("YOUR_NGROK_URL/sms", method: .post, parameters: parameters, headers: headers).response { response in
            print(response)

    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top