2013-10-29 2 views
5

twilio api를 사용하여 Android 장치에서 SMS를 보내려고합니다. 그 코드를 사용합니다 -android에서 twilio api 구현 관련 문제

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(); 
} 

TwilioRestClient 객체를 초기화하는 중 오류가 발생합니다. 나뿐만 아니라

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

당신이 당신의 빌드 경로'TwilioRestClient' – GrIsHu

+0

내가 twilio - 자바 SDK-3.3.14-항아리 -와 - dependencies.jar 파일을 추가 한을에 라이브러리를 추가해야합니다. –

+2

여기 Twilio 복음 전도자. 이러한 의견을 추가하기 만하면 Android와 같은 기기에서 Twilio REST API를 직접 사용하지 않는 것이 좋습니다. 이렇게하려면 분산 된 앱에 Twilio 자격 증명을 포함해야하므로 보안 위험이 있습니다. 대신 Android 앱에서 서버 측 웹 애플리케이션을 호출하고 Twilio API를 호출하는 것이 좋습니다. –

답변

1

내가 Twilio의 개발자 네트워크 팀 작업이 오류를 받고 큰 보안 위험이 될 것이다 당신의 인증 토큰을 포함, 데빈이 말을 꺼 건물입니다. 대신, 우리는 당신이 능력 토큰을 받기 위해 TwiML 앱을 사용할 것을 요청합니다. TwiML은 꽤 직관적 인 언어입니다. 관심이 있으시면 examples 온라인을 보내주십시오. 기능 토큰을 사용하여 장치가 Twilio 서버에 보내는 모든 통신에 서명 할 수 있습니다. Twilio here으로 TwiML 앱을 등록해야합니다.

Android 기기를 사용하는 경우 Android SDK을 사용하여 서버와 통신해야합니다. 다음은 Twilio Android SDK를 사용하는 Java 클래스의 예입니다. 이 클래스의 메소드를 앱에서 참조하여 서버에 연결할 수 있습니다. (즉, connect() 및 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(); 
    } 
}