2013-10-29 5 views
5

Ich möchte SMS von Android-Gerät mit Twilio API senden. Ich benutze diesen Code -Problem für die Umsetzung Twilio API in Android

TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN); 

    params = new HashMap<String,String>(); 
    params.put("From","+1 205-490-2571"); 
    params.put("To","9614549499"); 
    params.put("Body", "Bad news , the server is down and it needs your help"); 

    Account acct = client.getAccount(); 
    SmsFactory smsFactory = acct.getSmsFactory(); 
    Sms sms = null; 
    try { 
     sms = smsFactory.create(params); 
    } catch (TwilioRestException e) { 


e.printStackTrace(); 
} 

ich Störung erhalte TwilioRestClient Objekt zu initialisieren. Ich erhalte diesen Fehler

10-29 10:07:48.511: E/AndroidRuntime(354): FATAL EXCEPTION: main 
10-29 10:07:48.511: E/AndroidRuntime(354): java.lang.NoSuchMethodError: org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager.<init> 
10-29 10:07:48.511: E/AndroidRuntime(354): at com.twilio.sdk.TwilioRestClient.<init>(TwilioRestClient.java:139) 
10-29 10:07:48.511: E/AndroidRuntime(354): at com.twilio.sdk.TwilioRestClient.<init>(TwilioRestClient.java:110) 
10-29 10:07:48.511: E/AndroidRuntime(354): at com.twilio.twiliomessage.TwilioActivity$1.onClick(TwilioActivity.java:81) 
10-29 10:07:48.511: E/AndroidRuntime(354): at android.view.View.performClick(View.java:2485) 
10-29 10:07:48.511: E/AndroidRuntime(354): at android.view.View$PerformClick.run(View.java:9080) 
10-29 10:07:48.511: E/AndroidRuntime(354): at android.os.Handler.handleCallback(Handler.java:587) 
10-29 10:07:48.511: E/AndroidRuntime(354): at android.os.Handler.dispatchMessage(Handler.java:92) 
10-29 10:07:48.511: E/AndroidRuntime(354): at android.os.Looper.loop(Looper.java:123) 
10-29 10:07:48.511: E/AndroidRuntime(354): at android.app.ActivityThread.main(ActivityThread.java:3683) 
10-29 10:07:48.511: E/AndroidRuntime(354): at java.lang.reflect.Method.invokeNative(Native Method) 
10-29 10:07:48.511: E/AndroidRuntime(354): at java.lang.reflect.Method.invoke(Method.java:507) 
10-29 10:07:48.511: E/AndroidRuntime(354): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
10-29 10:07:48.511: E/AndroidRuntime(354): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
10-29 10:07:48.511: E/AndroidRuntime(354): at dalvik.system.NativeStart.main(Native Method) 
+0

Achten Sie darauf, die Bibliothek in Ihrem Build-Pfad 'TwilioRestClient' hinzugefügt haben – GrIsHu

+0

Ich habe hinzugefügt Twilio-java-sdk-3.3.14-jar-with-dependencies.jar Datei. –

+2

Twilio Evangelist hier. Um diese Kommentare hinzuzufügen, empfehlen wir nicht, die Twilio REST API direkt von Geräten wie Android zu verwenden. Dies liegt daran, dass Sie Ihre Twilio-Anmeldedaten in Ihre verteilte App einbinden müssen, was ein Sicherheitsrisiko darstellt. Stattdessen empfehlen wir, dass Sie Ihre Android-App als serverseitige Webanwendung erstellen, die wiederum die Twilio-API aufruft. –

Antwort

1

ich auch bei Twilio auf dem Developer Network Team zusammenarbeiten und den Aufbau vor, was Devin sagte, einschließlich Ihrer Auth-Token ein großes Sicherheitsrisiko wäre. Stattdessen bitten wir Sie, eine TwiML-App zu verwenden, um ein Fähigkeits-Token zu erhalten. TwiML ist eine ziemlich intuitive Sprache und wenn Sie interessiert sind, haben wir einige examples online. Sie können das Fähigkeits-Token verwenden, um alle Kommunikationen zu signieren, die Ihr Gerät an den Twilio-Server sendet. Sie müssen Ihre TwiML-App bei Twilio here registrieren.

Wenn Sie ein Android-Gerät verwenden, sollten Sie unsere Android SDK verwenden, um mit dem Server zu kommunizieren. Hier ist ein Beispiel für eine Java-Klasse, die Sie verwenden können, die das Twilio Android SDK verwendet. Sie können in Ihrer App auf die Methoden in dieser Klasse verweisen, um eine Verbindung zum Server herzustellen. (d. h. verbinden() und trennen()).

import android.app.ProgressDialog; 
import android.content.Context; 
import android.util.Log; 
import android.widget.ProgressBar; 
import com.twilio.client.Connection; 
import com.twilio.client.Device; 
import com.twilio.client.DeviceListener; 
import com.twilio.client.Twilio; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpUriRequest; 
import java.util.HashMap; 
import java.util.Map; 


public class TwilioAndroid implements Twilio.InitListener 
{ 
    private Device mDevice; 
    private String TAG = "TwilioAndroid"; 
    private Connection mConnection; 
    private Context mContext; 

    public TwilioAndroid(Context context) 
    { 
     this.mContext = context; 
     Twilio.initialize(context, this); 
    } 
//this will authenticate your device by going to the capability URL you’ve provided //(https://www.your-web-app.com/token) and retrieving a capability token to sign further communications with. 
    @Override 
    public void onInitialized(){ 
     Log.d(TAG, "Twilio SDK is ready"); 
     new HttpHandler(){ 
      @Override 
      public HttpUriRequest getHttpRequestMethod(){ 
       Log.d(TAG, mContext.getString(R.string.app_capability_url)); 

       return new HttpGet(mContext.getString(R.string.app_capability_url)); 
      } 

      @Override 
      public void onResponse(String token) { 
       mDevice = Twilio.createDevice(token, null); 
       Log.d(TAG, "Capability token: " + token); 
      } 
     }.execute(); 
    } 

    /* Twilio.InitListener method */ 
    @Override 
    public void onError(Exception e) { 
     Log.e(TAG, "Twilio SDK couldn't start: " + e.getLocalizedMessage()); 
    } 

//You can add more parameters to this custom method if necessary 
    public void connect(String phoneNumber) 
    { 
     Map<String, String> parameters = new HashMap<String, String>(); 
     parameters.put("To", phoneNumber); 
//and you can add your other parameters here 
     mConnection = mDevice.connect(parameters, null); 
     if (mConnection == null) 
      Log.w(TAG, "Failed to create new connection"); 
    } 
    public void disconnect() 
    { 
     if (mConnection != null) { 
      mConnection.disconnect(); 
      mConnection = null; 
     } 
    } 

    @Override 
    protected void finalize() 
    { 
     if (mDevice != null) 
      mDevice.release(); 
    } 
}