How to send SMS using Twilio in my android application?

后端 未结 6 1776
既然无缘
既然无缘 2020-12-08 17:15

In my android application I have created one button, when I had pressed on the button I want to send message.So for that I have created one java class and written twilio cod

相关标签:
6条回答
  • 2020-12-08 17:44

    You should use the BasicPhone project of Twilio SDK. I've tried this to call and now I can call too. This project has all the methods and functions that you need to call and to send SMS. First of all, you need a PHP web service to get capability token and pass that PHP script into your app.

    0 讨论(0)
  • 2020-12-08 17:54

    This is how I solved 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 讨论(0)
  • 2020-12-08 17:57

    My method, using OkHttp:

    1. Prerequisites

    Gradle:

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

    Manifest:

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

    Permission in activity:

    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 Allu code for generathing authorization in header

    0 讨论(0)
  • 2020-12-08 18:03

    This 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'

    0 讨论(0)
  • 2020-12-08 18:04

    Twilio Java SDK has third party dependencies without them it is not going to work. The dependencies are: 1. Httpcore 2. Httpclient 3. Commons lang 4. Json simple 5. Jackson Not quite sure if you need them all, but at least now you are missing httpcore

    0 讨论(0)
  • 2020-12-08 18:11

    I have used HttpPost method to send sms in that i have passed my url with base authentication here 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 is working well.

    0 讨论(0)
提交回复
热议问题