2016-03-30 8 views
0

So senden Sie SMS mit Twillio Api in Android. Hier ist mein Code. Was ich nicht weiß, ist, wie HTTP-Anfrage Körper einzustellen. Wenn ich es mit CocoaRestClient (ein Werkzeug für api-Test) testen, funktioniert es gut. Hilf mir bitte.So senden Sie SMS mit Twilio Api in Android

public void sendInviteSMS(String kToNumber) { 

    int random4Num = generateRequestCode(); 

    ... 

    String kTwilioSID = "..."; 
    String kTwilioSecret = "..."; 
    String kFromNumber = "..."; 

    String message = String.format("%s has sent you a invite. To accept, enter the following code: %d.", AppUtil.sharedObject().userFirstName, random4Num); 
    String kMessage = message; 

    String urlString = String.format("https://%s:%[email protected]/2010-04-01/Accounts/%s/SMS/Messages", kTwilioSID, kTwilioSecret, kTwilioSID); 

    HashMap postData = new HashMap(); 
    postData.put("From", kFromNumber); 
    postData.put("To", kToNumber); 
    postData.put("Body", kMessage); 

    // Validate user with the POST call 
    AsyncTask doPost = new TwilioPost(urlString) { 
     @Override 
     protected void onPostExecute(String result) { 
      Log.v("PHONE", result); 
     } 
    }.execute(postData); 
} 

... 

public class TwilioPost extends AsyncTask<HashMap<String, String>, Void, String> { 

private String remoteURL; 
private static final String TAG = "Wayjer"; 

public TwilioPost(String remoteURL) { 
    this.remoteURL = remoteURL; 
} 

//////////////////////////////////////////// 
// Call "doPost" in the background thread 
/////////////////////////////////////////// 
@Override 
protected String doInBackground(HashMap<String, String>... hashMaps) { 
    try { 
     return doPost(hashMaps[0]); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

/////////////////////////////////////////////////////// 
// Override to convert result string to a JSONObject 
////////////////////////////////////////////////////// 
@Override 
protected void onPostExecute(String result) { 
    try { 
     Log.v(TAG, result); 
    } catch (Exception e) { 
     Log.v(TAG, e.toString()); 
    } 
} 

public String doPost(HashMap<String, String> postData) throws IOException { 
    URL url = new URL(remoteURL); 
    String response = ""; 

    try { 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setUseCaches(false); 
     connection.setDoOutput(true); 
     connection.setDoInput(true); 

     connection.setReadTimeout(15000); 
     connection.setConnectTimeout(15000); 

     connection.setRequestMethod("POST"); 

     String postString = buildString(postData); 
     byte[] postBytes = postString.getBytes("UTF-8"); 

     connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     connection.setRequestProperty("Content-Length", Integer.toString(postBytes.length)); 
     // Write parameter... 
     OutputStream outStream = connection.getOutputStream(); 
     outStream.write(postBytes); 
     outStream.flush(); 
     outStream.close(); 

     connection.connect(); 
     int resCode = connection.getResponseCode(); 
     Log.v(TAG, "Response Message: " + connection.getResponseMessage()); 

     if (resCode == HttpsURLConnection.HTTP_OK) { 
      String line; 
      BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
      while ((line = reader.readLine()) != null) { 
       response += line; 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return response; 
} 

private String buildString(HashMap<String, String> postData) throws UnsupportedEncodingException { 
    StringBuilder strBuilder = new StringBuilder(); 
    boolean first = true; 
    for (Map.Entry<String, String> entry : postData.entrySet()) { 
     try { 
      Log.v(TAG, "HTTPPOST ENTRY: " + entry.getKey() + " - " + entry.getValue()); 
      if (first) 
       first = false; 
      else 
       strBuilder.append("&"); 

      strBuilder.append(URLEncoder.encode(entry.getKey(), "UTF-8")); 
      strBuilder.append("="); 
      strBuilder.append(URLEncoder.encode(entry.getValue(), "UTF-8")); 
     } catch (Exception e) { 

     } 
    } 

    return strBuilder.toString(); 
} 

}

+0

Gibt es jemanden, der mir hilft? :( –

+0

[Lösungen auf dieser Seite] (http://stackoverflow.com/a/38871516/5486128) kann Ihnen helfen – TarikW

+0

einen Blick auf hier http://stackoverflow.com/questions/28109087/how-to-send -sms-using-twillio-in-my-android-application/41745246 # 41745246 – Sam

Antwort

0

Megan von Twilio hier.

Die Interaktion mit der Twilio REST API direkt von Ihrer mobilen App wird nicht empfohlen.

Wenn Sie SMS von Android senden, würde ich vorschlagen, dass Sie eine Serverkomponente using your language of choice haben. Auf diese Weise können Sie Ihre API-Anmeldeinformationen geheim halten.

Ihre mobile app würde dann mit Ihrem Server verbindet, um die Anforderung zu machen für SMS über den REST-API mit den Parametern des Von, An und Körper der Nachricht zu senden:

https://www.twilio.com/docs/api/rest/sending-messages

In Java:

// You may want to be more specific in your imports 
import java.util.*; 
import com.twilio.sdk.*; 
import com.twilio.sdk.resource.factory.*; 
import com.twilio.sdk.resource.instance.*; 
import com.twilio.sdk.resource.list.*; 

public class TwilioTest { 
// Find your Account Sid and Token at twilio.com/user/account 
public static final String ACCOUNT_SID = "YOUR_ACCOUNT_SID"; 
public static final String AUTH_TOKEN = "[AuthToken]"; 

public static void main(String[]args) throws TwilioRestException { 
    TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN); 

    // Build the parameters 
    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    params.add(new BasicNameValuePair("To", "+16518675309")); 
    params.add(new BasicNameValuePair("From", "+14158141829")); 
    params.add(new BasicNameValuePair("Body", "Hey Jenny! Good luck on the bar exam!")); 
    params.add(new BasicNameValuePair("MediaUrl", "http://farm2.static.flickr.com/1075/1404618563_3ed9a44a3a.jpg")); 

    MessageFactory messageFactory = client.getAccount().getMessageFactory(); 
    Message message = messageFactory.create(params); 
    System.out.println(message.getSid()); 
} 
} 

Bitte lassen Sie mich wissen, wenn dies hilft!

Wenn Sie eine Beispiel-Fehlermeldung, die Sie möglicherweise mit Ihrem Code erhalten, angeben können, kann ich genauer hinsehen.

+0

Vielen Dank für Ihre Antwort, aber das funktioniert nicht für mich Es gibt mir viele Fehler Sorry.OWenn Sie denken, dass ich falsche Bibliothek verwendet Könnten Sie bitte geben Sie mir die URL der JAR-Datei? –

+0

Hallo William, Wenn Sie nicht über das Sicherheitsrisiko betroffen sind, wäre die Problemumgehung, den Twilio-Java-Code zu ändern, um die Abhängigkeit von den fehlerhaften Komponenten zu entfernen und dann neu zu erstellen. JAR-Dateien Leider habe ich die JAR-Datei nicht zur Verfügung. Es gibt einige vorherige Diskussion über diese Inkompatibilität auf Github: https://github.com/twilio/twilio-java/search?q=android&type=Issues –