2013-10-29 19 views
5

Chcę wysłać sms z urządzenia z Androidem za pomocą twilio api. Używam tego kodu -Problem wdrażania twilio api w Androidzie

Otrzymuję błąd inicjujący obiekt TwilioRestClient. Ja dostaję ten błąd

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

Upewnij się, że zostały dodane do biblioteki w ścieżce budowania 'TwilioRestClient' – GrIsHu

+0

Dodałem Twilio-java-SDK-3.3.14-Jar-z-dependencies.jar pliku. –

+2

Ewangelista Twilio tutaj. Aby dodać te komentarze, nie zalecamy korzystania z interfejsu API REST Twilio bezpośrednio z urządzeń takich jak Android. Wynika to z tego, że musisz podać swoje dane uwierzytelniające Twilio w aplikacji rozproszonej, co stanowi zagrożenie dla bezpieczeństwa. Zamiast tego zalecamy utworzenie aplikacji na Androida i wywołanie aplikacji internetowej po stronie serwera, która z kolei wywołuje interfejs API Twilio. –

Odpowiedz

1

pracuję w zespole Developer Network w Twilio jak i budowanie off co Devin powiedział, w tym swoją tokenu uwierzytelniania byłoby poważne zagrożenie bezpieczeństwa. Zamiast tego prosimy o użycie aplikacji TwiML w celu otrzymania tokena zdolności. TwiML jest dość intuicyjnym językiem, a jeśli jesteś zainteresowany, mamy do czynienia z internetem w Internecie pod numerem examples. Możesz użyć tokenu zdolności do podpisywania wszelkich komunikatów, które twoje urządzenie wysyła do serwera Twilio. Musisz zarejestrować swoją aplikację TwiML za pomocą Twilio here.

Jeśli używasz urządzenia z systemem Android, powinieneś użyć naszego Android SDK do komunikacji z serwerem. Oto przykład klasy java, z której można korzystać z pakietu SDK Twilio Android. Możesz odwoływać się do metod z tej klasy w swojej aplikacji, aby połączyć się z serwerem. (tzn. connect() i disconnect()).

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(); 
    } 
} 
Powiązane problemy