在我的android应用程序中,我创建了一个按钮,当我按下按钮时我想发送消息。为此,我创建了一个java类并编写了twilio代码。
final TwilioRestClient client = new TwilioRestClient(
ACCOUNT_SID, AUTH_TOKEN);
// Get the main account (The one we used to authenticate the
// client)
final Account mainAccount = client.getAccount();
final SmsFactory messageFactory = mainAccount.getSmsFactory();
final Map<String, String> messageParams = new HashMap<String, String>();
messageParams.put("To", "+912342423423");
messageParams.put("From", "+132432432434");
messageParams.put("Body", "This is my message");
try {
messageFactory.create(messageParams);
} catch (TwilioRestException e) {
e.printStackTrace();
}
当我使用上面的代码时,它会显示一些错误,例如java.lang.NoSuchMethodError: org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager
我在lib文件夹中只添加了一个jar文件" twilio-java-sdk-3.3.10-jar-with-dependencies.jar ".
请告诉我该怎么办?
答案 0 :(得分:10)
我已经使用HttpPost方法send sms,因为我已经通过基本身份验证传递了我的网址,这是我的代码
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(
"https://api.twilio.com/2010-04-01/Accounts/{ACCOUNT_SID}/SMS/Messages");
String base64EncodedCredentials = "Basic "
+ Base64.encodeToString(
(ACCOUNT_SID + ":" + AUTH_TOKEN).getBytes(),
Base64.NO_WRAP);
httppost.setHeader("Authorization",
base64EncodedCredentials);
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("From",
"+123424353534"));
nameValuePairs.add(new BasicNameValuePair("To",
"+914342423434"));
nameValuePairs.add(new BasicNameValuePair("Body",
"Welcome to Twilio"));
httppost.setEntity(new UrlEncodedFormEntity(
nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
System.out.println("Entity post is: "
+ EntityUtils.toString(entity));
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
}
运作良好。
答案 1 :(得分:6)
此解决方案包含Retrofit
public static final String ACCOUNT_SID = "accountSId";
public static final String AUTH_TOKEN = "authToken";
private void sendMessage() {
String body = "Hello test";
String from = "+...";
String to = "+...";
String base64EncodedCredentials = "Basic " + Base64.encodeToString(
(ACCOUNT_SID + ":" + AUTH_TOKEN).getBytes(), Base64.NO_WRAP
);
Map<String, String> data = new HashMap<>();
data.put("From", from);
data.put("To", to);
data.put("Body", body);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.twilio.com/2010-04-01/")
.build();
TwilioApi api = retrofit.create(TwilioApi.class);
api.sendMessage(ACCOUNT_SID, base64EncodedCredentials, data).enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.isSuccessful()) Log.d("TAG", "onResponse->success");
else Log.d("TAG", "onResponse->failure");
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.d("TAG", "onFailure");
}
});
}
interface TwilioApi {
@FormUrlEncoded
@POST("Accounts/{ACCOUNT_SID}/SMS/Messages")
Call<ResponseBody> sendMessage(
@Path("ACCOUNT_SID") String accountSId,
@Header("Authorization") String signature,
@FieldMap Map<String, String> metadata
);
}
build.gradle
的依赖性
compile 'com.squareup.retrofit2:retrofit:2.1.0'
答案 2 :(得分:6)
我的方法,使用OkHttp:
<强> 1。先决条件强>
摇篮:
dependencies {
compile 'com.squareup.okhttp3:okhttp:3.4.1'
}
清单:
<uses-permission android:name="android.permission.INTERNET"/>
活动许可:
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.setThreadPolicy( new StrictMode.ThreadPolicy.Builder().permitAll().build() );
}
<强> 2。代码强>
private void sendSms(String toPhoneNumber, String message){
OkHttpClient client = new OkHttpClient();
String url = "https://api.twilio.com/2010-04-01/Accounts/"+ACCOUNT_SID+"/SMS/Messages";
String base64EncodedCredentials = "Basic " + Base64.encodeToString((ACCOUNT_SID + ":" + AUTH_TOKEN).getBytes(), Base64.NO_WRAP);
RequestBody body = new FormBody.Builder()
.add("From", fromPhoneNumber)
.add("To", toPhoneNumber)
.add("Body", message)
.build();
Request request = new Request.Builder()
.url(url)
.post(body)
.header("Authorization", base64EncodedCredentials)
.build();
try {
Response response = client.newCall(request).execute();
Log.d(TAG, "sendSms: "+ response.body().string());
} catch (IOException e) { e.printStackTrace(); }
}
我在标题
中使用了Allu代码进行generathing授权答案 3 :(得分:0)
Twilio Java SDK具有第三方依赖关系,没有它们就无法运行。依赖关系是: 1.Httpcore 2. Httpclient Commons lang 杰森很简单 杰克逊 不太确定你是否需要它们,但至少现在你缺少httpcore
答案 4 :(得分:0)
您应该使用Twilio SDK的BasicPhone项目。我试过这个打电话,现在我也可以打电话。该项目具有调用和发送SMS所需的所有方法和功能。首先,您需要一个PHP Web服务来获取功能令牌并将该PHP脚本传递到您的应用程序中。
答案 5 :(得分:0)
这就是我解决需求的方法。 公共类TwilioAsyncTask扩展了AsyncTask {
Context context;
ProgressDialog progressDialog;
public TwilioAsyncTask(Context context) {
this.context = context;
}
@Override
protected String doInBackground(String... strings) {
//
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(
"https://api.twilio.com/2010-04-01/Accounts/AC_yourACCOUNT_SID_9b/SMS/Messages");
String base64EncodedCredentials = "Basic "
+ Base64.encodeToString(
(ACCOUNT_SID + ":" + AUTH_TOKEN).getBytes(),
Base64.NO_WRAP);
httppost.setHeader("Authorization",
base64EncodedCredentials);
try {
int randomPIN = (int) (Math.random() * 9000) + 1000;
String randomVeriValue = "" + randomPIN;
// these are for control in other anctivity used sharepreference
editorTwilio.putString("twilio_veri_no", randomVeriValue);
editorTwilio.commit();
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("From",
"+148******")); // what number they gave you
nameValuePairs.add(new BasicNameValuePair("To",
"+90" + phoneNo)); // your phone or our customers
nameValuePairs.add(new BasicNameValuePair("Body",
"Your verification number is : " + randomVeriValue));
httppost.setEntity(new UrlEncodedFormEntity(
nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
System.out.println("Entity post is: "
+ EntityUtils.toString(entity));
// Util.showMessage(mParentAct, "Welcome");
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
//
return "Executed";
}
@Override
protected void onPostExecute(String result) {
// execution of result of Long time consuming operation
//progressDialog.dismiss();
}
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(context, "", " Wait for ");
}
@Override
protected void onProgressUpdate(String... text) {
// Things to be done while execution of long running operation is in
// progress. For example updating ProgessDialog
}
}
And call your Task
TwilioAsyncTask task = new TwilioAsyncTask(CountryAndPhone.this);
task.execute();