OOB短信參數設置參考

OOB短信概述

OOB(Out-Of-Bound)短信,相對於移動應用的實際業務通道而言,也稱爲帶外短信;OOB對於終端手機來講是不可見的,終端應用可以截取該OOB短信,從而達到服務端向客戶端推送數據的目的。

該OOB短信實際上是二進制短信(Android裏的Data_SMS),Android系統收到該短信後並不會入庫也不會發送系統廣播事件,所以通過繼承ContentObserver使用觀察者模式並不能截取該OOB短信。

在Android系統中,截取二進制短信是採用Receiver方式,並配置指定的監聽端口,收取該端口的二進制短信數據、解析以及後續業務處理。

SMPP發送端設置

該發送端在VVM中是指VVMGW中的短信發送模塊,在發送該OOB短信時,需要設置以下幾個字段replace_if_present_flag、esm_class、protocol_id、data_coding,此外還需要設置UDH,該UDH用於指定OOB短信需要發送到終端的哪個端口。具體參數設置參考如下:

submitsm.setReplaceIfPresentFlag((byte) 0x01);
submitsm.setEsmClass((byte) 0x40);
submitsm.setProtocolId((byte) 0x7d);
submitsm.setDataCoding((byte) 0x04);

// 設置消息內容,設置UDH字段
ByteBuffer buffer = new ByteBuffer();
buffer.appendByte((byte) 0x06);// UDHL
buffer.appendByte((byte) 0x05);// IEI
buffer.appendByte((byte) 0x04);// IEL
buffer.appendByte((byte) 0x15);// IED 5499,改爲同時兼容iPhone和Android
buffer.appendByte((byte) 0x7b);// IED
buffer.appendByte((byte) 0x15);// IED 5499,改爲同時兼容iPhone和Android
buffer.appendByte((byte) 0x7b);// IED

Android應用客戶端設置

在Android客戶端中如果需要截取二進制短信,需要在指定的端口上進行監聽(正常情況下,接收到的二進制短信不會存到短信庫中)。

即在AndroidManifest.xml中receiver中加入過濾器爲android.intent.action.DATA_SMS_RECEIVED,並且指定監聽端口等信息,如下:

<receiver android:name=".SMSReceiver">
    <intent-filter android:priority="2147483647">
         <action android:name="android.intent.action.DATA_SMS_RECEIVED"/>
         <data android:host="localhost" android:port="16001" android:scheme="sms"/>
    </intent-filter>
</receiver>

Blackberry應用客戶端設置

在Blackberry客戶端沒有相關的配置文件,只能通過程序來指定監聽端口(正常情況下,接收到的二進制短信不會存到短信庫中)。

private static class ListeningThread extends Thread { 
        private boolean _stop = false; 
        private DatagramConnection _dc; 
        public synchronized void stop() { 
               _stop = true; 
               try { 
                       _dc.close(); // Close the connection so the thread returns. 
               } catch (IOException e) {
                       System.err.println(e.toString()); 
               } 
} 
public void run() { 
       try { 
               _dc = (DatagramConnection)Connector.open("sms://:5499"); 
               for(;;) { 
                       if ( _stop ) {
                              return; 
                       } 
                       Datagram d = _dc.newDatagram(_dc.getMaximumLength()); 
                       _dc.receive(d);
                       String address = new
                       String(d.getAddress()); 
                       String msg = new String(d.getData()); 
                       System.out.println("Message received: " + msg);
                      System.out.println("From: " + address); 
                      System.exit(0); 
               } 
          } catch (IOException e) {
                   System.err.println(e.toString()); 
          } 
     } 
}

注意:該端口需要與SMPP發送短信的UDH中兩個BYTE字節的IED字段(3E81,即16001)的值相同。

截圖

SMSC監控臺-OOB短信

clip_image002

SMSC監控臺-正常短信

clip_image004

Android應用接收OOB短信

clip_image006

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章