hhoareau Posté(e) 10 mars 2011 Share Posté(e) 10 mars 2011 (modifié) SMSSender SFR API est un ensemble de web services utilisables dans une application web ou mobile. Via une simple connexion internet il devient possible d’envoyer ou recevoir des SMS, des MMS via des numéros courts, faire de la géolocalisation via le réseau, obtenir des infos sur les clients, etc… Ce post illustre l’utilisation du service d’envoi de SMS en REST dans une mini application Android. Principe La requête REST d’envoi de SMS a été construite via l'API Test Tooll de SFR API : ws.red.sfr.fr/red-ws/red-b2c/resources/sms/send?responseType=json&token=a815a789b3603631031fba209f6d7616&to="… On y injecte le numéro d’expéditeur et le message de l’utilisateur de l’application. Elle utilise l’identifiant d’un compte de démonstration SFR. Celui-ci n’est pas pérenne. Il est conseillé de s'inscrire sur http://api.sfr.fr pour utiliser votre propre identifiant plutôt que l'identifiant de l'exemple dont le nombre de crédits peut être épuisés rapidement Fragment de code Le code est volontairement minimaliste. Le projet, développé sous Eclipse est disponible en téléchargement sur ce post. Il s’agit d’un démonstrateur. Les exceptions ne sont pas réellement gérées. Il y a matière à de nombreuses optimisations. L’application repose sur un fichier xml décrivant l’interface (main.xml) et une seule activity android pour la fenêtre unique de l’application. package smsSender.SFRAPI; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URLEncoder; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONException; import org.json.JSONObject; import android.accounts.Account; import android.accounts.AccountManager; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class Main extends Activity { TextView mResult; //Zone pour le CR d'envoi du SMS TextView mMessage; //Contient le message à envoyé TextView mGSM; //Contient le numero SFR du destinataire String expediteur=""; private OnClickListener cmdSendSMS = new OnClickListener() { public void onClick(View v) { mResult.setText("Envoi en cours"); String mes=URLEncoder.encode(mMessage.getText().toString()+" de "+expediteur); //Requete d'envoi de SMS construite sur http://api.sfr.fr/apitesttool/ JSONObject query=SfrAPI("http://ws.red.sfr.fr/red-ws/red-b2c/resources/sms/send?responseType=json" + "&token=a815a789b3603631031fba209f6d7616&to="+ mGSM.getText().toString()+"&type=PhoneNumber&msg="+mes); try{ if(query!=null){ String errorCode=query.getString("errorCode"); if(errorCode.contentEquals("0")) mResult.setText("SMS envoyé"); else mResult.setText("SMS non envoyé. Message SFR "+query.getString("error")); } else {mResult.setText("SMS non envoyé");} } catch(JSONException e){} } }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mResult =(TextView)findViewById(R.id.txtResult); mMessage=(TextView)findViewById(R.id.mMessage); mGSM =(TextView)findViewById(R.id.mGSM); Button button1 = (Button)findViewById(R.id.Button01); button1.setOnClickListener(cmdSendSMS); //Identification de l'expéditeur //On récupére un compte email Account[] accounts = AccountManager.get(this).getAccounts(); for (Account account : accounts) { if(account.name.indexOf("@", 1)>0)expediteur = account.name; } } //Cette méthode peut être directement invoqué avec les requetes construites //via l'API Test Tool de SFR API : http://api.sfr.fr/apitesttool/ avec le format JSON //Elle mériterait d'etre isolée dans une classe a part entière afin de //permettre son usage par l'ensemble d'une application //Au delà, afin de ne pas freezé l'application, l'usage de service REST devrait se faire //en dehors de l'activity principale. Voir www.youtube.com/watch?v=xHXn3Kg2IQE public JSONObject SfrAPI(String q){ JSONObject rc=null; HttpClient httpclient = new DefaultHttpClient(); HttpGet request = new HttpGet(q); try { HttpResponse response=httpclient.execute(request); BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); rc=new JSONObject(reader.readLine()); } catch (ClientProtocolException e) {e.printStackTrace(); } catch (JSONException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace();} httpclient.getConnectionManager().shutdown(); return(rc); } } Le fichier de ressources décrit une interface minimaliste : <?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout android:id="@+id/widget115" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffffff" xmlns:android="http://schemas.android.com/apk/res/android" > <ImageView android:id="@+id/logo" android:src="@drawable/sfr_api_simple" android:layout_width="101px" android:layout_height="62px" android:layout_x="354dip" android:layout_y="13dip"></ImageView> <TextView android:textColor="#ff000000" android:layout_height="wrap_content" android:id="@+id/TextView03" android:text="Destinataire SFR" android:layout_width="wrap_content" android:layout_x="13dip" android:layout_y="35dip"></TextView> <TextView android:textColor="#ff000000" android:layout_height="21px" android:id="@+id/TextView02" android:text="Message" android:layout_width="wrap_content" android:layout_x="13dip" android:layout_y="84dip"></TextView> <TextView android:textColor="#ff000000" android:layout_height="wrap_content" android:id="@+id/txtResult" android:text="Résultat" android:layout_width="wrap_content" android:layout_x="17dip" android:layout_y="237dip"></TextView> <Button android:id="@+id/Button01" android:layout_height="125px" android:text="Envoyer" android:layout_width="117px" android:layout_x="348dip" android:layout_y="102dip"></Button> <EditText android:layout_height="125px" android:textStyle="italic" android:text="votre message ici" android:id="@+id/mMessage" android:layout_width="320px" android:layout_x="13dip" android:layout_y="104dip"></EditText> <EditText android:layout_height="wrap_content" android:phoneNumber="true" android:text="06" android:id="@+id/mGSM" android:layout_width="150px" android:layout_x="180dip" android:layout_y="21dip"></EditText> </AbsoluteLayout> Les permissions suivantes sont requises dans le manifest.xml pour invoquer le web service (accés internet) et récupérer le mail de l’expéditeur (get accounts). <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission> Conclusion Cet exemple de code, illustre l’usage d’une des API SFR : l’envoi de SMS. De nombreuses autres API sont disponibles. Du fait de l’exposition en mode REST, elles sont compatibles avec l’ensemble des environnements et plateformes du marché. Elles peuvent être utilisées directement dans des applications clientes (comme c’est le cas dans cet exemple) mais également sur la partie serveur d’une application client-serveur. Alors bon code ... Hervé Hoareau (SFR API) Modifié 30 mars 2012 par hhoareau Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
hhoareau Posté(e) 30 mars 2012 Auteur Share Posté(e) 30 mars 2012 Les API SFR peuvent maintenant être utilisée gratuitement dans la limite des volumes offerts mensuellement par SFR (environs 50 SMS par mois pour l'API d'envoi de SMS) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.