OOB短信参数设置参考

来源:互联网 发布:jquery 移除数组对象 编辑:程序博客网 时间:2024/04/30 00:39

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);// UDHLbuffer.appendByte((byte) 0x05);// IEIbuffer.appendByte((byte) 0x04);// IELbuffer.appendByte((byte) 0x15);// IED 5499,改为同时兼容iPhone和Androidbuffer.appendByte((byte) 0x7b);// IEDbuffer.appendByte((byte) 0x15);// IED 5499,改为同时兼容iPhone和Androidbuffer.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

原创粉丝点击