我想从我的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
答案 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();
}
}