作者:1凡evan | 来源:互联网 | 2023-06-06 20:31
OOB短信概述OOB(Out-Of-Bound)短信,相对于移动应用的实际业务通道而言,也称为带外短信;OOB对于终端手机来讲是不可见的,终端应用可以截取该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短信需要发送到终端的哪个端口。具体参数设置参考如下:
// 《OMTP_VVM_Specification_v1_3_Final[1].pdf》 2.9.1.7 submitsm.setReplaceIfPresentFlag((byte) 0x01); // 《OMTP_VVM_Specification_v1_3_Final[1].pdf》 2.9.1.7 submitsm.setEsmClass((byte) 0x40); // 《VVM短信填写格式.xls》 submitsm.setProtocolId((byte) 0x7d); // 《OMTP_VVM_Specification_v1_3_Final[1].pdf》 2.9.1.7 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) 0x3e);// IED 16001 buffer.appendByte((byte) 0x81);// IED buffer.appendByte((byte) 0x3e);// IED 16001 buffer.appendByte((byte) 0x81);// IED buffer.appendString("MBOXUPDATE", Data.ENC_ASCII); |
SVN路径:http://10.200.100.102/svn/VMS/C04/vvm/vvmclient/src/oob/
Android应用客户端设置
在Android客户端中如果需要截取二进制短信,需要在指定的端口上进行监听(正常情况下,接收到的二进制短信不会存到短信库中)。
即在AndroidManifest.xml中receiver中加入过滤器为android.intent.action.DATA_SMS_RECEIVED,并且指定监听端口等信息,如下:
SVN路径:http://172.16.54.48/svn/mobile/testing/OOB/
注意:该端口需要与SMPP发送短信的UDH中两个BYTE字节的IED字段(3E81,即16001)的值相同。
截图
SMSC监控台-OOB短信
SMSC监控台-正常短信
Android应用接收OOB短信