How to send SMS using Twilio in an Android app?

In my Android application, I created one button, when I pressed the button I want to send message.So, for this I created one Java class and wrote twilio code.

final TwilioRestClient client = new TwilioRestClient( ACCOUNT_SID, AUTH_TOKEN); // Get the main account (The one we used to authenticate the // client) final Account mainAccount = client.getAccount(); final SmsFactory messageFactory = mainAccount.getSmsFactory(); final Map<String, String> messageParams = new HashMap<String, String>(); messageParams.put("To", "+912342423423"); messageParams.put("From", "+132432432434"); messageParams.put("Body", "This is my message"); try { messageFactory.create(messageParams); } catch (TwilioRestException e) { e.printStackTrace(); } 

when i use the code above it shows some error like java.lang.NoSuchMethodError: org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager

I added only one jar file to the lib folder as " twilio-java-sdk-3.3.10-jar-with-dependencies.jar ".

please tell me what can i do?

+8
android sms twilio
source share
6 answers

I used the HttpPost method to send sms in that I passed my url with basic authentication here, this is my code

 HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost( "https://api.twilio.com/2010-04-01/Accounts/{ACCOUNT_SID}/SMS/Messages"); String base64EncodedCredentials = "Basic " + Base64.encodeToString( (ACCOUNT_SID + ":" + AUTH_TOKEN).getBytes(), Base64.NO_WRAP); httppost.setHeader("Authorization", base64EncodedCredentials); try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("From", "+123424353534")); nameValuePairs.add(new BasicNameValuePair("To", "+914342423434")); nameValuePairs.add(new BasicNameValuePair("Body", "Welcome to Twilio")); httppost.setEntity(new UrlEncodedFormEntity( nameValuePairs)); // Execute HTTP Post Request HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); System.out.println("Entity post is: " + EntityUtils.toString(entity)); } catch (ClientProtocolException e) { } catch (IOException e) { } } 

It works well.

+7
source share

This is a solution with Retrofit

 public static final String ACCOUNT_SID = "accountSId"; public static final String AUTH_TOKEN = "authToken"; private void sendMessage() { String body = "Hello test"; String from = "+..."; String to = "+..."; String base64EncodedCredentials = "Basic " + Base64.encodeToString( (ACCOUNT_SID + ":" + AUTH_TOKEN).getBytes(), Base64.NO_WRAP ); Map<String, String> data = new HashMap<>(); data.put("From", from); data.put("To", to); data.put("Body", body); Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.twilio.com/2010-04-01/") .build(); TwilioApi api = retrofit.create(TwilioApi.class); api.sendMessage(ACCOUNT_SID, base64EncodedCredentials, data).enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { if (response.isSuccessful()) Log.d("TAG", "onResponse->success"); else Log.d("TAG", "onResponse->failure"); } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { Log.d("TAG", "onFailure"); } }); } interface TwilioApi { @FormUrlEncoded @POST("Accounts/{ACCOUNT_SID}/SMS/Messages") Call<ResponseBody> sendMessage( @Path("ACCOUNT_SID") String accountSId, @Header("Authorization") String signature, @FieldMap Map<String, String> metadata ); } 

Dependencies for build.gradle
compile 'com.squareup.retrofit2:retrofit:2.1.0'

+4
source share

My method using OkHttp :

1. Background

Gradle:

 dependencies { compile 'com.squareup.okhttp3:okhttp:3.4.1' } 

manifest:

 <uses-permission android:name="android.permission.INTERNET"/> 

Permission in action:

 if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.setThreadPolicy( new StrictMode.ThreadPolicy.Builder().permitAll().build() ); } 

2. Code

 private void sendSms(String toPhoneNumber, String message){ OkHttpClient client = new OkHttpClient(); String url = "https://api.twilio.com/2010-04-01/Accounts/"+ACCOUNT_SID+"/SMS/Messages"; String base64EncodedCredentials = "Basic " + Base64.encodeToString((ACCOUNT_SID + ":" + AUTH_TOKEN).getBytes(), Base64.NO_WRAP); RequestBody body = new FormBody.Builder() .add("From", fromPhoneNumber) .add("To", toPhoneNumber) .add("Body", message) .build(); Request request = new Request.Builder() .url(url) .post(body) .header("Authorization", base64EncodedCredentials) .build(); try { Response response = client.newCall(request).execute(); Log.d(TAG, "sendSms: "+ response.body().string()); } catch (IOException e) { e.printStackTrace(); } } 

I used the Allu code to generate authorization in the title

+3
source share

Twilio Java SDK has third-party dependencies without them, it will not work. Dependencies: 1. Httpcore 2. Httpclient 3. Community 4. Json simple 5. Jackson Not quite sure if you need everything, but at least now you are missing httpcore

0
source share

You must use the BasicPhone Twilio SDK project. I tried calling it, and now I can call too. This project has all the methods and functions that you need to call and send SMS. First of all, you need a PHP web service to get a feature token and pass this PHP script to your application.

0
source share

This is how I decided my need. public class TwilioAsyncTask extends AsyncTask {

  Context context; ProgressDialog progressDialog; public TwilioAsyncTask(Context context) { this.context = context; } @Override protected String doInBackground(String... strings) { // HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost( "https://api.twilio.com/2010-04-01/Accounts/AC_yourACCOUNT_SID_9b/SMS/Messages"); String base64EncodedCredentials = "Basic " + Base64.encodeToString( (ACCOUNT_SID + ":" + AUTH_TOKEN).getBytes(), Base64.NO_WRAP); httppost.setHeader("Authorization", base64EncodedCredentials); try { int randomPIN = (int) (Math.random() * 9000) + 1000; String randomVeriValue = "" + randomPIN; // these are for control in other anctivity used sharepreference editorTwilio.putString("twilio_veri_no", randomVeriValue); editorTwilio.commit(); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("From", "+148******")); // what number they gave you nameValuePairs.add(new BasicNameValuePair("To", "+90" + phoneNo)); // your phone or our customers nameValuePairs.add(new BasicNameValuePair("Body", "Your verification number is : " + randomVeriValue)); httppost.setEntity(new UrlEncodedFormEntity( nameValuePairs)); // Execute HTTP Post Request HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); System.out.println("Entity post is: " + EntityUtils.toString(entity)); // Util.showMessage(mParentAct, "Welcome"); } catch (ClientProtocolException e) { } catch (IOException e) { } // return "Executed"; } @Override protected void onPostExecute(String result) { // execution of result of Long time consuming operation //progressDialog.dismiss(); } @Override protected void onPreExecute() { progressDialog = ProgressDialog.show(context, "", " Wait for "); } @Override protected void onProgressUpdate(String... text) { // Things to be done while execution of long running operation is in // progress. For example updating ProgessDialog } } And call your Task TwilioAsyncTask task = new TwilioAsyncTask(CountryAndPhone.this); task.execute(); 
0
source share

All Articles