【问题标题】:Error Sending SMS with Twilio on android wih TwilioRestClient使用 TwilioRestClient 在 Android 上使用 Twilio 发送 SMS 时出错
【发布时间】:2016-02-02 20:02:24
【问题描述】:

我想从我的安卓应用发送短信。我有 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)

如果有人提供一些示例工作代码,我将不胜感激。 -谢谢

【问题讨论】:

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


    【解决方案1】:

    这里是 Twilio 开发者宣传员。

    不建议将您的 Account SID 和 Auth Token 嵌入应用程序中,因为攻击者可能会反编译应用程序、提取您的凭据并对您的帐户造成严重破坏。

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

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

    【讨论】:

    • 嗨菲尔,TwilioRestClient 和该文档是否过时了?我正在棉花糖上尝试它,它给出了上面提到的错误。
    • 我不太确定,说实话,我不是 Java 开发人员。但是我可以告诉你,由于我之前描述的原因,它并没有为 Android 构建,这很可能是它不起作用的原因。
    【解决方案2】:

    我让它通过以下方式工作,只使用 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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多