2013-10-29 12 views
5

twilio apiを使用してアンドロイドデバイスからSMSを送信したいと思います。アンドロイドで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オブジェクトを初期化するために、エラーを取得しています - 私は、そのコードを使用します。私は、私もTwilioのDeveloper Networkのチームで作業して、認証トークンは、大きなセキュリティリスクになるなど、デヴィンが言ったことをオフに構築

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-javaの-SDK-3.3.14-ジャーと-dependencies.jarファイルを追加したのでライブラリを追加したことを確認してください。 –

+2

Twilioエバンジェリストはこちら。これらのコメントを追加するだけで、Twilio REST APIをAndroidなどのデバイスから直接使用することはお勧めしません。これは、分散アプリケーションにTwilio認証情報を含める必要があります。これはセキュリティリスクです。代わりに、あなたのAndroidアプリがサーバー側のWebアプリケーションを作成して呼び出すことをお勧めします。このアプリケーションはTwilio APIを呼び出します。 –

答えて

1

このエラーを取得しています。その代わりに、能力トークンを受け取るために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(); 
    } 
} 
関連する問題