Přijímání SMS v Javě

Tento průvodce vám poskytne stručný úvod do toho, jak můžete získat přijaté zprávy z SMS Gateway do vaší Java aplikace. Tato operace je demonstrována jednoduchým Java kódem, který využívá HTTP požadavky ke sběru příchozích zpráv z SMS Gateway. Pokud budete postupovat podle tohoto průvodce, naučíte se, jak vytvořit ukázkovou Java aplikaci, která získává zprávy ze složky doručené pošty, a uvidíte, jak otestovat řešení. Takže pojďme začít.

Co je Java SMS API?

Java SMS API vám umožňuje implementovat SMS služby do vaší Java aplikace. API komunikuje s SMS Gateway pomocí HTTP požadavků, které odesílají zprávu a vracejí odpověď.

Předpoklady

Přijímat SMS v Javě
  1. Otevřete Apache NetBeans IDE
  2. Vytvořte novou Java aplikaci
  3. Vytvořte novou třídu v Javě
  4. Zkopírujte a vložte ukázkový zdrojový kód níže
  5. Do prohlížeče zadejte 'https://localhost:9515' pro otevření SMS Gateway
  6. Vyberte připojení HTTP Server a otevřete jeho HTML formulář
  7. Odešlete nějaké testovací zprávy
  8. Spusťte Java aplikaci pro získání zpráv

Video 1 - Jak přijímat SMS v Javě (Návod ve videu)

Níže uvedený ukázkový kód v Javě, který umožňuje přijímat příchozí zprávy z SMS Gateway, je volně k použití. Můžete jej upravit nebo použít ve svém projektu. Pokud chcete pouze otestovat řešení, postupujte podle níže uvedených kroků nebo se můžete podívat na výše uvedené video, abyste se naučili, jak vytvořit ukázkovou Java aplikaci, která umí přijímat příchozí zprávy z SMS Gateway.

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 "?";
      }
}

Krok 1 – Otevřete Apache NetBeans IDE

Abyste mohli vytvořit Java aplikaci, potřebujete mít aplikaci, která to umožňuje. Jednou z těchto aplikací je Apache NetBeans IDE, který lze stáhnout v sekci Předpoklady výše. Pokud již tento IDE máte, stačí jej otevřít z plochy, jak vidíte na Obrázku 1.

open netbeans
Obrázek 1 – Otevření Apache NetBeans

Krok 2 – Vytvořte novou Java aplikaci

Po otevření Apache NetBeans IDE je první věc, kterou musíte udělat, vytvořit Java aplikaci. Pro tento účel vyberte možnost 'Nový projekt...' z panelu nástrojů. Tím se otevře okno, které obsahuje všechny dostupné projekty, které lze v Apache NetBeans vytvořit. Zde vyberte možnost Java aplikace, jak je znázorněno na Obrázku 2, a nakonec klikněte na 'Další'.

create new project
Obrázek 2 – Vytvoření nového projektu Java aplikace

Krok 3 – Nakonfigurujte Java aplikaci

Před vytvořením Java aplikace je třeba provést některé konfigurace. V tomto menu musíte zadat název projektu, můžete také vybrat umístění projektu. Zde lze také určit název balíčku. Pokud jste dokončili všechny konfigurace, jednoduše klikněte na 'Dokončit', jak je znázorněno na Obrázku 3.

configure project
Obrázek 3 – Konfigurace názvu projektu a balíčku

Krok 4 – Vytvořte Java třídu

Po vytvoření Java aplikace musíte vytvořit Java třídu, protože v tomto okamžiku ještě neobsahuje žádnou třídu. Pro tento účel klikněte pravým tlačítkem na balíček, vyberte 'Nový' a jak ukazuje Obrázek 4, klikněte na 'Java třída...'. Poté je třeba zadat název Java třídy a po dokončení klikněte na 'Vytvořit'.

create new java class
Obrázek 4 – Vytvoření nové Java třídy

Krok 5 – Nahraďte Java kód z této stránky

V tomto okamžiku máte potřebnou Java aplikaci, ale neobsahuje správný kód. Chcete-li to opravit, musíte původní kód nahradit příkladovým kódem z této stránky. Přejděte tedy k příkladovému kódu a zkopírujte jej do schránky pomocí klávesové zkratky Ctrl+C. Poté přejděte k vytvořené Java třídě, nejprve odstraňte kód, který zde najdete. Poté stiskněte Ctrl+V a vložte příkladový kód do Java třídy, jak vidíte na Obrázku 5.

replace java code
Obrázek 5 – Nahrazení Java kódu z webové stránky

Krok 6 – Odešlete testovací zprávy

Před spuštěním příkladové Java aplikace je třeba mít nějaké příchozí zprávy, které může aplikace shromažďovat. SMS Gateway vám poskytuje možnost simulovat příchozí zprávy, abyste mohli otestovat své řešení. Pro tento účel otevřete SMS Gateway a vyberte připojení HTTP Server. Pokud nemáte připojení HTTP Server, podívejte se na jak vytvořit připojení HTTP Server. Zde otevřete HTML formulář tohoto připojení a, jak ukazuje Obrázek 6, odešlete nějaké testovací zprávy.

simulate incoming sms
Obrázek 6 – Simulace příchozích SMS

Krok 7 – Spusťte Java aplikaci

Posledním krokem tohoto průvodce je spuštění Java aplikace. Jedná se o jednoduchou operaci; vše, co musíte udělat, je kliknout na tlačítko 'Spustit' v Apache NetBeans, jak vidíte na Obrázku 7. Tato akce spustí příkladový Java kód, který vytiskne HTTP požadavek odeslaný do SMS Gateway, a poté také vytiskne odpověď od SMS Gateway, která obsahuje všechny příchozí zprávy.

run java code
Obrázek 7 – Spuštění Java kódu v NetBeans pro příjem SMS

Shrnutí

Tento průvodce, který jste právě četli, vám poskytuje informace o tom, jak přijímat SMS zprávy z SMS Gateway pomocí Java aplikace. Pomocí naší Java SMS API můžete využít zdroje jazyka Java a použít je k ovládání SMS Gateway. Java API v kombinaci s Ozeki SMS Gateway vytvoří výkonný systém pro odesílání SMS schopný odeslat až 1000 SMS za sekundu.

Pokud byste se chtěli dozvědět více užitečných informací o výhodách dalších podobných API řešení, navštivte naši stránku o Pythonu pro správu SMS provozu.

Pokud potřebujete přeposílání e-mailů na SMS a ještě jste tak neučinili, stáhněte si Ozeki SMS Gateway nyní a vytvořte toto nastavení!