在android wih TwilioRestClient上使用Twilio发送短信时出错

在android wih TwilioRestClient上使用Twilio发送短信时出错,android,sms,twilio,twilio-click-to-call,Android,Sms,Twilio,Twilio Click To Call,我想从我的android应用程序发送短信。我有SID和AUTHTOKEN 贴在下面。感谢有人查看并提供一些输入或工作代码: 问题:似乎有多种方法可以做到这一点——使用TwilioJavaSDK、twilioclient android和RESTAPI 下面是我在TwilioRestClient上尝试的代码,它抛出的错误如下: public static void SendSMS() throws TwilioRestException { TwilioRestClient client

我想从我的android应用程序发送短信。我有SID和AUTHTOKEN 贴在下面。感谢有人查看并提供一些输入或工作代码:

问题:似乎有多种方法可以做到这一点——使用TwilioJavaSDK、twilioclient android和RESTAPI

下面是我在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());
}
public static void SendSMS()引发TwilioRestException{
TwilioRestClient=新的TwilioRestClient(Utils.TWILO_SID,Utils.TWILO_AUTH_令牌);
Map Map=newhashmap();
地图放置(“from”,“4254434895”);
地图放置(“至”,“4254434294”);
map.put(“正文”、“测试消息”);
SmsFactory factory=client.getAccount().getSmsFactory();
Sms=工厂。创建(映射);
Log.d(“twilliohelper”,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)
E/AndroidRuntime:致命异常:主
进程:com.cyoo.app,PID:3088
java.lang.NoSuchMethodError:Lorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager类中没有虚拟方法setDefaultMaxPerRoute(I)V;或其超类(在/system/framework/ext.jar中显示“org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager”的声明)
位于com.twilio.sdk.TwilioRestClient.(TwilioRestClient.java:139)
位于com.twilio.sdk.TwilioRestClient.(TwilioRestClient.java:109)
在com.cyoo.app.TwilioHelper.SendSMS(TwilioHelper.java:16)
在com.cyoo.app.RegiserFinalActivity$2.onClick(RegiserFinalActivity.java:71)
在android.view.view.performClick上(view.java:4785)

我将感谢任何人抛出一些示例工作代码-感谢这里的Twilio开发者布道者

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

我们建议创建一个实现Twilio REST API的web应用程序,包装您的凭证并为您发送SMS消息。然后,您可以从Android应用程序调用web应用程序并发送SMS,而无需分发凭据


查看以了解如何在此处构建服务器端组件。这可能是一个好的开始。

这里是Twilio开发者的福音传道者

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

我们建议创建一个实现Twilio REST API的web应用程序,包装您的凭证并为您发送SMS消息。然后,您可以从Android应用程序调用web应用程序并发送SMS,而无需分发凭据


查看以了解如何在此处构建服务器端组件。这可能是一个很好的开始。

我通过以下方式实现了它,只是使用RESTAPI。发布,因为它可能对某些人有用

是的,我同意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();
    }
}

我让它以如下方式工作,只是使用RESTAPI。发布,因为它可能对某人有用

是的,我同意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();
    }
}

嗨,Phil,是最差的客户吗?文档有点过时了吗?我正在棉花糖上试用它,它给出了上面提到的错误。老实说,我不是Java开发人员,我不确定。然而,我可以告诉你,由于我前面描述的原因,它并没有被用于Android,这很可能是它不起作用的原因。嗨,Phil,Twiliorest客户端和文档有点过时了吗?我正在棉花糖上试用它,它给出了上面提到的错误。老实说,我不是Java开发人员,我不确定。然而,我可以告诉你,由于我前面描述的原因,Android并没有考虑到它,这很可能就是它不起作用的原因。