Java 응용 프로그램에서 SMS를 보내고받을 수있는 방법은 무엇입니까?
어떻게?
답변
답변
간단한 알림 만 원하는 경우 많은 이동 통신사가 이메일을 통해 SMS를 지원합니다. 이메일을 통한 SMS 참조
답변
Java에서 본 최고의 SMS API는 JSMPP입니다. 강력하고 사용하기 쉬우 며 엔터프라이즈 수준의 응용 프로그램에 매일 사용했습니다 (매일 20K 이상의 SMS 메시지 전송).
이 API는 기존 SMPP API의 세부 정보를 줄이기 위해 작성되었습니다. 링크 요청-응답 자동 조회와 같은 저수준 프로토콜 통신의 복잡성을 숨기므로 매우 간단하고 사용하기 쉽습니다.
Ozeki와 같은 다른 API를 사용해 보았지만 대부분 상용이거나 처리량이 제한적입니다 (예 : 1 초에 3 개 이상의 SMS 메시지를 보낼 수 없음).
답변
SMSLib라는 API가 있는데 정말 훌륭합니다.
http://smslib.org/
이제 API를 사용하여이 서비스를 제공 할 수있는 많은 Saas 제공자가 있습니다.
예 : mailchimp, esendex, Twilio, …
답변
GSM 모뎀과 Java Communications API를 사용하여이 작업을 수행 할 수 있습니다.
-
먼저 Java Comm Api를 설정해야합니다.
-
다음 당신은 GSM 모뎀이 필요합니다 (바람직하게는 sim900 모듈)
-
Java JDK 최신 버전 선호
-
AT 명령 안내서
암호
패키지 샘플;
import java.io.*; import java.util.*; import gnu.io.*; import java.io.*; import org.apache.log4j.chainsaw.Main; import sun.audio.*; public class GSMConnect implements SerialPortEventListener, CommPortOwnershipListener { private static String comPort = "COM6"; // This COM Port must be connect with GSM Modem or your mobile phone private String messageString = ""; private CommPortIdentifier portId = null; private Enumeration portList; private InputStream inputStream = null; private OutputStream outputStream = null; private SerialPort serialPort; String readBufferTrial = ""; /** Creates a new instance of GSMConnect */ public GSMConnect(String comm) { this.comPort = comm; } public boolean init() { portList = CommPortIdentifier.getPortIdentifiers(); while (portList.hasMoreElements()) { portId = (CommPortIdentifier) portList.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { if (portId.getName().equals(comPort)) { System.out.println("Got PortName"); return true; } } } return false; } public void checkStatus() { send("AT+CREG?\r\n"); } public void send(String cmd) { try { outputStream.write(cmd.getBytes()); } catch (IOException e) { e.printStackTrace(); } } public void sendMessage(String phoneNumber, String message) { char quotes ='"'; send("AT+CMGS="+quotes + phoneNumber +quotes+ "\r\n"); try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // send("AT+CMGS=\""+ phoneNumber +"\"\r\n"); send(message + '\032'); System.out.println("Message Sent"); } public void hangup() { send("ATH\r\n"); } public void connect() throws NullPointerException { if (portId != null) { try { portId.addPortOwnershipListener(this); serialPort = (SerialPort) portId.open("MobileGateWay", 2000); serialPort.setSerialPortParams(115200,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); } catch (PortInUseException | UnsupportedCommOperationException e) { e.printStackTrace(); } try { inputStream = serialPort.getInputStream(); outputStream = serialPort.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } try { /** These are the events we want to know about*/ serialPort.addEventListener(this); serialPort.notifyOnDataAvailable(true); serialPort.notifyOnRingIndicator(true); } catch (TooManyListenersException e) { e.printStackTrace(); } //Register to home network of sim card send("ATZ\r\n"); } else { throw new NullPointerException("COM Port not found!!"); } } public void serialEvent(SerialPortEvent serialPortEvent) { switch (serialPortEvent.getEventType()) { case SerialPortEvent.BI: case SerialPortEvent.OE: case SerialPortEvent.FE: case SerialPortEvent.PE: case SerialPortEvent.CD: case SerialPortEvent.CTS: case SerialPortEvent.DSR: case SerialPortEvent.RI: case SerialPortEvent.OUTPUT_BUFFER_EMPTY: case SerialPortEvent.DATA_AVAILABLE: byte[] readBuffer = new byte[2048]; try { while (inputStream.available() > 0) { int numBytes = inputStream.read(readBuffer); System.out.print(numBytes); if((readBuffer.toString()).contains("RING")){ System.out.println("Enter Inside if RING Loop"); } } System.out.print(new String(readBuffer)); } catch (IOException e) { } break; } } public void outCommand(){ System.out.print(readBufferTrial); } public void ownershipChange(int type) { switch (type) { case CommPortOwnershipListener.PORT_UNOWNED: System.out.println(portId.getName() + ": PORT_UNOWNED"); break; case CommPortOwnershipListener.PORT_OWNED: System.out.println(portId.getName() + ": PORT_OWNED"); break; case CommPortOwnershipListener.PORT_OWNERSHIP_REQUESTED: System.out.println(portId.getName() + ": PORT_INUSED"); break; } } public void closePort(){ serialPort.close(); } public static void main(String args[]) { GSMConnect gsm = new GSMConnect(comPort); if (gsm.init()) { try { System.out.println("Initialization Success"); gsm.connect(); Thread.sleep(5000); gsm.checkStatus(); Thread.sleep(5000); gsm.sendMessage("+91XXXXXXXX", "Trial Success"); Thread.sleep(1000); gsm.hangup(); Thread.sleep(1000); gsm.closePort(); gsm.outCommand(); System.exit(1); } catch (Exception e) { e.printStackTrace(); } } else { System.out.println("Can't init this card"); } } }
답변
Nexmo를 사용하여 SMS 를 보내고 SMS 를 받을 수 있습니다.
Nexmo Java Library 로 SMS를 보내는 것은 매우 간단합니다. 후 새로운 계정을 만드는 API 키 및 비밀, 가상 번호를 임대하고, 점점 당신과 같이 SMS를 보낼 수있는 라이브러리를 사용할 수 있습니다 :
public class SendSMS {
public static void main(String[] args) throws Exception {
AuthMethod auth = new TokenAuthMethod(API_KEY, API_SECRET);
NexmoClient client = new NexmoClient(auth);
TextMessage message = new TextMessage(FROM_NUMBER, TO_NUMBER, "Hello from Nexmo!");
//There may be more than one response if the SMS sent is more than 160 characters.
SmsSubmissionResult[] responses = client.getSmsClient().submitMessage(message);
for (SmsSubmissionResult response : responses) {
System.out.println(response);
}
}
}
SMS를 받으려면 웹 후크를 사용하는 서버를 설정해야합니다. 꽤 간단합니다. Java로 SMS 수신에 대한 자습서를 확인하는 것이 좋습니다 .
공개 : 저는 Nexmo에서 일합니다
답변
TextMarks를 사용하면 공유 단축 코드에 액세스하여 API를 통해 앱에서 문자 메시지를주고받을 수 있습니다. 메시지는 임의의 전화 번호 대신 41411에서 시작합니다. 이메일 게이트웨이와 달리 전체 160 개의 문자를 사용할 수 있습니다.
앱에서 다양한 기능을 호출하기 위해 사람들에게 키워드 텍스트 41411 ~ 41411을 지시 할 수도 있습니다. JAVA API 클라이언트는 몇 가지 다른 인기있는 언어와 매우 포괄적 인 문서 및 기술 지원과 함께 있습니다.
14 일 무료 평가판은 아직 테스트하고 앱을 빌드하는 개발자를 위해 쉽게 확장 할 수 있습니다.
여기에서 확인하십시오 : TextMarks API 정보