SMS fogadása Java nyelven

Az oldalon található útmutató rövid bevezetést nyújt arról, hogyan kérheted le a fogadott üzeneteket az SMS Gateway-ből Java alkalmazásodba. A műveletet egy egyszerű Java kód demonstrálja, amely HTTP kéréseket használ a bejövő üzenetek gyűjtéséhez az SMS Gateway-ből. Ha követed ezt az útmutatót, megtanulod, hogyan hozhatsz létre egy példa Java alkalmazást, amely lekéri az üzeneteket a beérkezett üzenetek mappájából, és láthatod, hogyan tesztelheted a megoldást. Szóval, kezdjük is el.

Mi az a Java SMS API?

A Java SMS API lehetővé teszi, hogy SMS szolgáltatásokat implementálj Java alkalmazásodba. Az API HTTP kéréseken keresztül kommunikál az SMS Gateway-vel, amely elküldi az üzenetet és választ küld vissza.

Előfeltételek

SMS fogadása Java nyelven

  1. Nyisd meg az Apache NetBeans IDE-t
  2. Hozz létre egy új Java alkalmazást
  3. Hozz létre egy új Java osztályt
  4. Másold be az alábbi példa forráskódot
  5. Írd be a böngésződbe a 'https://localhost:9515' címet az SMS Gateway megnyitásához
  6. Válaszd ki a HTTP Szerver kapcsolatot és nyisd meg annak HTML űrlapját
  7. Küldj néhány teszt üzenetet
  8. Futtasd a Java alkalmazást az üzenetek lekéréséhez

1. videó - Hogyan fogadjunk SMS-t Java nyelven (Videós útmutató)

Az alábbi Java SMS példakód, amely lekéri a bejövő üzeneteket az SMS Gateway-ből, szabadon felhasználható, módosíthatod vagy használhatod a projektjeidben. Ha csak tesztelni szeretnéd a megoldást, kövesd az alábbi lépésről lépésre útmutatót, vagy nézd meg a fenti videót, hogy megtanuld, hogyan hozhatsz létre egy példa Java alkalmazást, amely képes lekérni a bejövő üzeneteket az SMS Gateway-ből.

package ozeki;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.GeneralSecurityException;
import java.security.cert.X509Certificate;
import java.util.stream.Collectors;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.xml.parsers.*;
import org.xml.sax.InputSource;
import org.w3c.dom.*;
import java.io.*;

public class ReceiveSMS {
 
    public static void main(String[] args) {
 
        TrustManager[] trustAllCerts = new TrustManager[]{
            new X509TrustManager() {
                @Override
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }
 
                @Override
                public void checkClientTrusted(
                        java.security.cert.X509Certificate[] certs, String authType) {
                }
 
                @Override
                public void checkServerTrusted(
                        java.security.cert.X509Certificate[] certs, String authType) {
                }
            }
        };
        try {
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
 
            HostnameVerifier allHostsValid = new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            };
            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
 
        } catch (GeneralSecurityException e) {
            System.out.println(e.getMessage());
        }
 
        try {
            StringBuilder sendString = new StringBuilder();
            String username = "john";
            String password = "Xc3ffs";
            String httpUrl = "https://127.0.0.1:9508/";
            String folder = "inbox";
            String limit = "3";
 
            sendString.append(httpUrl).append("api?action=receivemessage&username=").
                    append(username).append("&password=").
                    append(password).append("&folder=").append(folder).
                    append("&limit=").append(limit).append("&afterdownload=delete");
 
            System.out.println("Sending request: " + sendString.toString());
 
            URL url = new URL(sendString.toString());
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("GET");
 
            BufferedReader br = null;
            System.out.println("Http response received: ");
            if (con.getResponseCode() == 200) {
                br = new BufferedReader(new InputStreamReader(con.getInputStream()));
                String response =  br.lines().collect(Collectors.joining("\n"));
                response = response.substring(response.indexOf('\n')+1);
                response = response.substring(response.indexOf('\n')+1);
                DisplayMessages(response);
  
            } else {
                br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
                String response =  br.lines().collect(Collectors.joining("\n"));
                System.out.println(response);
            }
            
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
    }
    
    static void DisplayMessages(String response) {
        try{
            DocumentBuilderFactory dbf =
                DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(response));

            Document doc = db.parse(is);
            NodeList nodes = doc.getElementsByTagName("message");
            
            for (int i = 0; i < nodes.getLength(); i++) {
                Element element = (Element) nodes.item(i);

                NodeList originator = element.getElementsByTagName("originator");
                Element line = (Element) originator.item(0);
                String sender = getCharacterDataFromElement(line);
                
                NodeList messagedata = element.getElementsByTagName("messagedata");
                line = (Element) messagedata.item(0);
                String text = getCharacterDataFromElement(line);
                DisplayMessage(sender, text);
            }
        } catch (Exception ex) {
            System.out.println("The inbox is empty");
        } 
    }
    public static void DisplayMessage(String sender, String text) {
        System.out.println(sender + ": "+ text);
    }
      
    public static String getCharacterDataFromElement(Element e) {
        Node child = e.getFirstChild();
        if (child instanceof CharacterData) {
           CharacterData cd = (CharacterData) child;
           return cd.getData();
        }
        return "?";
      }
}

1. lépés - Nyisd meg az Apache NetBeans IDE-t

Ahhoz, hogy létre tudj hozni egy Java alkalmazást, szükséged van egy olyan programra, amely ezt képes megtenni. Az egyik ilyen program az Apache NetBeans IDE, amely letölthető a fenti Előfeltételek részben. Ha már rendelkezel ezzel az IDE-vel, egyszerűen csak nyisd meg az asztalodról, ahogyan az az 1. ábrán látható.

open netbeans
1. ábra - Apache NetBeans megnyitása

2. lépés - Hozz létre egy új Java alkalmazást

Miután megnyitottad az Apache NetBeans IDE-t, az első dolog, amit tenned kell, az egy Java alkalmazás létrehozása. Ehhez válaszd ki az 'Új projekt...' opciót az eszköztárból. Ezzel a művelettel megjelenik egy ablak, amely tartalmazza az összes elérhető projektet, amelyet létre lehet hozni az Apache NetBeans-ban. Itt válaszd ki a Java alkalmazás opciót, ahogyan az a 2. ábrán látható, majd kattints a 'Tovább' gombra.

create new project
2. ábra - Új Java alkalmazás projekt létrehozása

3. lépés - Konfiguráld a Java alkalmazást

A Java alkalmazás létrehozása előtt néhány beállítást kell elvégezned rajta. Ebben a menüben meg kell adnod egy nevet a projektnek, választhatsz egy helyet a projekt számára, és itt is megadhatod a csomag nevét. Ha minden beállítást elvégeztél, egyszerűen kattints a 'Befejezés' gombra, ahogyan az a 3. ábrán látható.

configure project
3. ábra - Projekt és csomagnév konfigurálása

4. lépés - Hozz létre egy Java osztályt

Miután létrehoztad a Java alkalmazást, létre kell hoznod egy Java osztályt, mivel ezen a ponton még nem tartalmaz osztályt. Ehhez jobb klikkel válaszd ki a csomagot, majd 'Új', és ahogyan a 4. ábra mutatja, kattints a 'Java osztály...' opcióra. Ezután adj meg egy nevet a Java osztálynak, és ha befejezted, kattints a 'Létrehozás' gombra.

create new java class
4. ábra - Új Java osztály létrehozása

5. lépés - Cseréld le a Java kódot erről az oldalról

Ezen a ponton már rendelkezel a szükséges Java alkalmazással, de még nem tartalmazza a megfelelő kódot. Ennek javításához le kell cserélned az eredeti kódot az oldalon található példakódra. Tehát menj az példakódhoz, és másold a vágólapodra a Ctrl+C billentyűkombinációval. Ezután menj a létrehozott Java osztályhoz, és először töröld a megtalálható kódot. Ezután nyomd meg a Ctrl+V billentyűkombinációt a példakód beillesztéséhez a Java osztályba, ahogyan az az 5. ábrán látható.

replace java code
5. ábra - Java kód cseréje az oldalról

6. lépés - Küldj néhány teszt üzenetet

Mielőtt futtatnád a példa Java alkalmazást, szükséged van néhány bejövő üzenetre, amelyet az alkalmazás össze tud gyűjteni. Az SMS Gateway lehetőséget biztosít a bejövő üzenetek szimulálására, így tesztelheted a megoldásodat. Ehhez egyszerűen nyisd meg az SMS Gateway-t és válaszd ki a HTTP Szerver kapcsolatot. Ha nincs HTTP Szerver kapcsolatod, nézd meg hogyan hozz létre egy HTTP Szerver kapcsolatot. Itt nyisd meg a kapcsolat HTML űrlapját, és ahogyan a 6. ábra mutatja, küldj néhány teszt üzenetet.

simulate incoming sms
6. ábra - Néhány bejövő SMS szimulálása

7. lépés - Futtasd a Java alkalmazást

Az útmutató utolsó lépése a Java alkalmazás futtatása. Ez egy egyszerű művelet; mindössze annyit kell tenned, hogy rákattintasz a 'Futtatás' gombra az Apache NetBeans-ban, ahogyan az a 7. ábrán látható. Ez a művelet futtatja a példa Java kódot, amely kiírja az SMS Gateway-nek küldött HTTP kérést, majd kiírja az SMS Gateway válaszát is, amely tartalmazza az összes bejövő üzenetet.

run java code
7. ábra - Java kód futtatása a NetBeans-ban SMS fogadásához

Összefoglalás

Az imént elolvasott útmutató információt nyújt arról, hogyan fogadhatsz SMS üzeneteket az SMS Gateway-ből Java alkalmazás segítségével. Java SMS API-nk segítségével kihasználhatod a Java nyelv erőforrásait, és felhasználhatod az SMS Gateway irányítására. A Java API az Ozeki SMS Gateway-vel kombinálva egy erős SMS küldő rendszert alkot, amely másodpercenként akár 1000 SMS küldésére is képes.

Ha több hasznos információt szeretnél megtudni más hasonló API megoldások előnyeiről, látogass el a Python használata SMS forgalom kezeléséhez oldalainkra.

Ha e-mailről SMS továbbításra van szükséged, és még nem tetted meg, töltsd le az Ozeki SMS Gateway-t most és hozd létre ezt a beállítást!