Aller au contenu

Envoi de SMS via une connexion WIFI


Recommended Posts

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é par hhoareau
Lien vers le commentaire
Partager sur d’autres sites

  • 1 year later...

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...