0

我想从我的 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)

我将感谢任何抛出一些示例工作代码的人。-谢谢

4

2 回答 2

3

Twilio 开发人员布道者在这里。

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

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

查看Twilio.com 的教程部分,了解如何在此处构建服务器端组件。这篇关于 SMS 通知的教程可能是一个好的开始。

于 2016-02-03T13:34:43.257 回答
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();
    }
}
于 2016-02-04T00:25:08.857 回答