错误在TwilioRestClient上使用Twilio发送短信

时间:2016-02-02 20:02:25

标签: android sms twilio twilio-click-to-call

我想从我的Android应用程序发送短信。我有SID和AUTHTOKEN 贴在下面。欣赏某人正在寻找并提供一些输入或工作代码:

问题:似乎有多种方法可以做到这一点 - 使用twilio-java-sdk,twilioclient-android和使用REST API。

这是我用TwilioRestClient尝试的代码,它抛出错误:

public static void SendSMS() throws TwilioRestException {
    TwilioRestClient client = new TwilioRestClient(Utils.TWILO_SID, Utils.TWILO_AUTH_TOKEN);

    Map<String,String> map = new HashMap<>();
    map.put("from", "4254434895");
    map.put("to", "4254434294");
    map.put("Body", "test message");

    SmsFactory factory = client.getAccount().getSmsFactory();
    Sms sms = factory.create(map);

    Log.d("TwilioHelper", sms.getSid());
    Log.d("TwilioHelper", sms.toString());
}

错误:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.cyoo.app, PID: 3088
    java.lang.NoSuchMethodError: No virtual method setDefaultMaxPerRoute(I)V in class Lorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager; or its super classes (declaration of 'org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager' appears in /system/framework/ext.jar)
        at com.twilio.sdk.TwilioRestClient.<init>(TwilioRestClient.java:139)
        at com.twilio.sdk.TwilioRestClient.<init>(TwilioRestClient.java:109)
        at com.cyoo.app.TwilioHelper.SendSMS(TwilioHelper.java:16)
        at com.cyoo.app.RegiserFinalActivity$2.onClick(RegiserFinalActivity.java:71)
        at android.view.View.performClick(View.java:4785)

我会感激任何人抛出一些示例工作代码。 -Thanks

2 个答案:

答案 0 :(得分:2)

Twilio开发者传道者在这里。

建议不要在应用程序中嵌入您的帐户SID和身份验证令,因为攻击者可能会对应用程序进行反编译,提取您的凭据并对您的帐户造成严重破坏。

我们建议您创建一个实现Twilio REST API的Web应用程序,将您的凭据包装为您发送SMS消息。然后,您可以从Android应用程序调用您的Web应用程序,并在不分发凭据的情况下发送短信。

查看tutorials section of Twilio.com以了解如何在此处构建服务器端组件。这tutorial on SMS notifications可能是一个好的开始。

答案 1 :(得分:1)

我让它以下面的方式工作,只使用REST API.Posting,因为它可能对某人有用。

是的,我同意Philnash,有人反编译我们的代码存在问题。所以,一定要保存并从服务器获取凭据。

  public static void SendSMS(String targetPhoneNumber) {
    String postURL = "https://api.twilio.com/2010-04-01/Accounts/"+Utils.TWILO_SID+"/Messages";

    try {
        String base64EncodedCredentials = "Basic "
                + Base64.encodeToString(
                (Utils.TWILO_SID + ":" + Utils.TWILO_AUTH_TOKEN).getBytes(),
                Base64.NO_WRAP);

        RequestBody formBody = new FormBody.Builder()
                .add("From", "+1xxxxxx")  // number we get from Twilio
                .add("To", "+1xxxxxxxxx") //TODO  targetPhoneNumber
                .add("Body", "Hello this is a message through twilio")
                .build();

        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .header("Authorization ", base64EncodedCredentials)
                .url(postURL)
                .post(formBody)
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //print errors if code is not 200
            }
        });

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}