iOSでTwilioを使用してSMSメッセージを送信します
-
27-10-2019 - |
質問
iPhoneアプリからSMSメッセージをプログラムで送信するにはどうすればよいですか?私は今Twilioを使用していますが、HTTPリクエストを正しく設定し、サーバーで認証し、応答を取得できます。
Twilioサーバーから応答を取得できるが、適切なデータを通過することはないため、HTTPヘッダーの誤解がある必要があります。
私の現在のコードは、単純なボタンを押すことで呼び出される方法です。
- (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);
解決
iOSでSMSメッセージを送信したい場合は、 MFMessageComposeViewController
内側 MessageUI.framework
. 。ご存知のように、これにはユーザー相互作用が必要です。
要求したように、Twilioを使用して、ほぼすべてのプラットフォームを使用してSMSを直接送信できます。 iOSの場合、次のSwiftコードを使用してTwilio APIを押して、次のテキストメッセージを送信できます。
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()
さらにAPIインタラクションについては、公式ドキュメントを確認できます。 https://www.twilio.com/docs/api/rest
他のヒント
わかりました、私はヘッダーについて正しかったと思います。
私はそれを確認するように見えるこの答えを見つけました: iOS:HTTP POSTリクエストの実行方法は?
ヘッダーではなく、リクエストの本文に投稿データを送信する必要があります。 TwilioはHTTP呼び出しを取得していますが、投稿データは空です。
それがうまくいくかどうか教えてください。
AfnetWorkingを使用してリクエストを送信します。
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]];
}];
これかもしれません:
数 +YourNumberは未確認です。トライアルアカウントは、未検証の数値にメッセージを送信できません。 +yournumberを確認します twilio.com/user/account/phone-numbers/verified, 、またはTwilio番号を購入して、未検証番号にメッセージを送信します。
トワイリオと Swift 2.2+, alamofire, swiftyjson - >回答:
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
}
}
Xcode 8および スウィフト3.
https://www.twilio.com/blog/2016/11/how-to-send-an-sms-from-ios-in-swift.html
クライアント側のクライアント側を保存することはお勧めしないため、投稿と選択のサーバー側の言語を使用して潜在的な脆弱性を回避する方法が表示されます。 alamofire HTTPリクエストの場合:
@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)
}
}