Binary SMS: envio de conteúdo rico para dispositivos usando SMS

este artigo explicará de um nível alto a um nível mais baixo como escrever um aplicativo móvel simples habilitado para SMS que permitirá que você envie “mensagens de instalação aérea”. Depois de ler este artigo, você poderá criar um pequeno applet J2ME que teoricamente se enviará para outro telefone usando uma mensagem SMS como meio de entrega. Na verdade, devido a limitações na API de mensagens sem fio no J2ME (JSR 120/205), a porta para Mensagens Push Wap é “reservada” por razões de segurança. A capacidade de enviar conteúdo através do canal SMS amplamente suportado pode ser muito útil para provedores de conteúdo.

as mensagens SMS são um pequeno número de bytes compactados enviados pelas redes do operador. Muitos de vocês já experimentaram o envio de “mensagens de texto” de dispositivos e muitos se referem ao envio de mensagens SMS como “mensagens de texto”.

uma pequena introdução técnica ao SMS

o escopo deste artigo é ser prático, por isso não passaremos por todos os detalhes técnicos e chatos das redes, mas três conceitos são muito importantes para entender sobre o sms.

  • SMS usa o conceito de “porto” apenas como um padrão da internet sockets fazer;
  • mensagens SMS tem um limite no corpo de 160 caracteres;
  • O corpo não é a única coisa que você pode jogar com uma SMS, há também o Cabeçalho de Dados do Usuário.

Portas

Quando você bate em uma URL em seu navegador, como http://dev.mobi, você, de forma transparente chamada porta 80 de um servidor web, por convenção. A conexão será inicializada na porta 80 e, em seguida, alternada para uma porta superior para permitir que outros Usuários acessem a mesma porta do servidor web. A porta 80, conforme declarado pela IANA, refere-se ao protocolo HTTP, isso significa que um servidor, que é capaz de entender a solicitação de protocolo HTTP, será despertado e estará pronto para responder e processar solicitações HTTP. O mesmo acontece com as mensagens SMS. Você pode enviar um SMS para uma porta específica de um telefone e você vai acordar um serviço específico nesse dispositivo. Agora, assim como nem todos os computadores têm serviços padrão (como um servidor web), nem todos os dispositivos móveis têm serviços ouvindo portas. Este é um material muito “relacionado ao fabricante”, então você precisará verificar o seu telefone o que está habilitado para aceitar.

Body and encoding

este pode ser um tópico difícil de tratar, mas vamos apenas descrever informações muito básicas que podem ser úteis. A codificação padrão SMS usa 7 bits para lidar com um caractere. Isso significa que você pode escrever em um SMS apenas os caracteres que estão presentes em uma tabela char muito básica, sim aqueles famosos 127 caracteres. Se você quiser ir coisas mais complicadas e enviar personagens mais “interessantes”, então um grupo de 8 bits é necessário e a tabela de caracteres disponíveis fica maior. O espaço disponível é de 1120 bits por SMS, não mais, não menos. Você pode ter 160 caracteres usando 7 bits ou 140 caracteres usando 8 bits

Nota: O caractere ” É “está incluído na” tabela básica”, enquanto o caractere” È “está nas”tabelas maiores”. Se você escrever uma mensagem com o segundo caractere, terá menos espaço disponível na mensagem. Portanto, preste atenção em quais caracteres você está usando ao enviar SMS 😉

cabeçalho de dados do Usuário

o cabeçalho de dados do usuário (também conhecido como UDH) é o que um “desenvolvedor de alto nível” pode definir enquanto faz algo mais do que uma simples “mensagem de texto”. Um UDH é muito útil porque você pode enviar ” mensagens de texto invisíveis “para o aplicativo móvel (onde” aplicativos móveis ” quero dizer aqueles em execução em dispositivos móveis, por exemplo) ou você pode dizer a um dispositivo que a mensagem conterá informações especiais. É muito semelhante a um arquivo XML: você tem que dizer ao analisador o que você está enviando, e o conteúdo seguindo o prolog que será tratado pelo próprio analisador.

o UDH é usado principalmente para especificar quais portas nosso cliente (telefone) enviará o SMS para. Ele é feito por um conjunto de número hexadecimal que descrevem:

<quanto tempo a UDH é> <o formato usado para especificar as portas de números> <o número da porta de comprimento> <número da porta de destino> <número da porta de origem>.

Como um exemplo prático, digamos que eu queira criar um UDH para enviar uma WAP Push, onde o padrão de porta de destino para WAP empurra é 2948, a UDH será:

1
06 05 04 0B 84 23 F0

onde:

  • 06 significa “ei, leia os seguintes 6 bytes”
  • 05 é o formato para números, neste caso, números hexadecimais
  • 04 vai contar a UDH que cada porta é representado com 4 caracteres
  • 0B84 é a porta de destino, 2948 (representação decimal) ou 0B84 (representação hexadecimal)
  • 23F0 é a porta de origem, 9200 (representação decimal) ou 23F0 (representação hexadecimal).

Nota: Use uma calculadora simples para converter números decimais em hex; selecione “Dec”, coloque 2948 na calculadora e pressione o botão”Hex”. Qualquer calculadora científica pode fazer isso e muitos sistemas operacionais têm um pequeno aplicativo” calc ” em algum lugar que pode fazer isso.

Binary SMS

um “binary SMS” é um SMS textual formatado em XML que foi transformado com WBXML. WBXML é um “transformador de tag”, isso significa que para cada tag XML, um byte binário está associado. Por exemplo, a tag <SI> é convertida como o caractere binário &#x0005;

por que WBXML?

resposta fácil: o resultado de uma transformação WBXML é menor no número de bytes gerados do que o próprio arquivo XML textual detalhado.

Nota: muitas tags são convertidas em bytes, mas às vezes também o conteúdo (como endereços de URL), por exemplo, o URL http://www.dev.mobi pode ser escrito em WBXML como 0Ddev.mobi , onde ” 0D ” significa http://www.

“0”, mais genérico e que se destaca por http:// você pode escrever a URL de duas maneiras:

1
<span>0Ddev.mobi </span>

ou

1
<span>0Cwww.desenvolvimento.mobi < / span>

o primeiro usa 9 caracteres (0D é um byte), o segundo 13 caracteres! Eu amo WBXML 🙂

Termos

para ser claro, por “WAP push” não queremos dizer uma maneira de enviar SMS usando WAP. O que queremos dizer é o que é tecnicamente conhecido como SI (indicação de Serviço). Uma indicação de serviço é um SMS binário enviado para uma porta dedicada em um dispositivo que informa ao dispositivo que há um URL esperando para ser visitado. A URL pode ser o endereço de um toque em um servidor web, o endereço de um arquivo JAD para instalar uma aplicação J2ME ou um JPG ou simplesmente uma página WAP; é o “webmaster” do servidor web para colocar o conteúdo no site da web, e o dispositivo para entender como lidar com o conteúdo. Para obter mais informações sobre este aspecto do quebra-cabeça, consulte a nossa série de artigos de adaptação de conteúdo.

Nota: Quando digo “servidor web”, quero dizer servidor web e WAP, já que a maioria dos servidores web pode ser configurada para fornecer conteúdo WAP. Por ” SMS de configuração OTA “quero dizer um SMS binário que contém detalhes APN (mas pode conter mais) Também conhecido como”configuração de acesso à Internet”.

Nota: existem mensagens especiais de ” indicação de serviço “que normalmente são chamadas de SL (carga de serviço) que são semelhantes a”SI”. Um SI pede a permissão para o Usuário antes de buscar o conteúdo através da conexão de rede, SL baixar conteúdo automaticamente sem pedir permissão para o usuário. “SL” são muito semelhantes às mensagens MMS: o conteúdo está em um servidor web e o SMS diz ao telefone para baixar a mensagem.

Então, Vamos Começar

Primeiro de tudo, precisamos ler alguns artigos (infelizmente) para ler algumas especificações sobre como escrever conteúdo XML a ser enviado através de SMS. Um bom ponto de partida pode ser a “especificação de mensagens inteligentes 3.0.0” da Nokia, que pode ser baixada de www.forum.nokia.com e também mais documentos técnicos da Open Mobile Alliance (oma) de www.openmobilealliance.org/tech/affiliates/wap/wapindex.html

então nossos passos serão:

  • Decidir o que queremos para enviar
  • Localizar os documentos sobre esse tópico
  • Encontrar a estrutura XML da mensagem a ser enviada
  • Personalizar o XML
  • Converter o XML para WBXML
  • Preparar a UDH
  • Enviar a UDH e o CORPO

Como queremos enviar uma aplicação J2ME para um novo telefone, em seguida, é necessário enviar um “Serviço de Indicação de mensagem”, também conhecido como “push WAP”. Este ” SI ” pode ser usado para enviar um SMS que será lido como um link para baixar algo. Qualquer tipo de conteúdo (imagem/jpeg, aplicativo/java-archive, …) é válido se o telefone puder abri-lo.

então, quem pode dizer quais tipos de conteúdo um dispositivo pode abrir ? DeviceAtlas pode nos ajudar aqui! (veja referências)

Encontre os documentos sobre esse tópico

Ok, vamos abrir o link OMA e vamos para a “área funcional” denotada “push”. Vamos obter a “especificação de indicação de serviço WAP”. Para entender como funciona o WBXML, sugiro ler o parágrafo 8.3.2 “Tokens de início de atributo”.

Encontre a estrutura XML da mensagem

para aqueles que mais gostam de DTDs, veja a seção 7.2. Todos os outros podem pular todo o documento e ir para o exemplo de leitura na seção 9. O XML existe bastante auto-explicativo, então farei alguma personalização diretamente.

1
2
3
4
5
6
7

<?versão xml=”1.0″?>
<!DOCTYPE si PUBLIC “-//WAPFORUM//DTD SI 1.0 / / EN “” http://www. wapforum.org/DTD/si.dtd”>
<si>
<indication href=http://www.dev.mobi/is_fun.html si-id=”6532″>
DevDotMobi is Fun !
</indication>
</si>

Convert to WBXML

Hex code Meaning
02 WBXML Version 1.2
05 SI 1.0 Public Identifier
6A Charset UTF-8
00 String table length = 0
45 <SI>
C6 <indication>
0C href=”http://
03 String starts
* 7777772E6465762E6D6F62692F69735F66756E2E68746D6C www.dev.mobi/is_fun.html
00 Cadeia de caracteres termina
11 si-atributo id
03 Seqüência começa
** 36353332 6532
00 Cadeia de caracteres termina
07 atributo de Ação (sinal – médio)
01 Termina de atributos, agora o conteúdo
03 Seqüência começa
* 446576446F744D6F62692069732046756E2021 DevDotMobi é Divertido !
00 Cadeia de caracteres termina
01 </indicação>
01 </SI>

* Estes são cadeias de caracteres utilizado para transmitir o conteúdo para o SI, cada caractere na seqüência de caracteres é convertida para sua representação hexadecimal.
* * “6532” deve ser considerado uma sequência de caracteres e não um número, portanto, não use a calculadora para converter esse número

nosso corpo é, juntando todos os números:

1
02056A0045C60C037777772E6465762E6D6F62692F69735F66756E2E68746D6C0<br />011033635333200070103446576446F744D6F62692069732046756E2021000101

(o que é de 130 caracteres)

Preparar a UDH

Preparar a UDH é muito fácil. Basta começar com “06 05 04” e, em seguida, adicionar os números de porta. WAP Push messages usa “porta de destino” 2948 enquanto a porta de origem é 9200. Converta números de porta decimal para formatos hexadecimais, então 2948 se torna 0B84 e 9200 se torna 23f0. Magicamente, o UDH é: 06 05 04 0B 84 23 F0

envie o SMS e o UDH

agora, o que você precisa fazer com isso? Muito simples, basta juntar tudo e o SMS está pronto para ser enviado.

<UDH> + < > CORPO>

1
UDH: 06 05 04 0B 84 23 F0<br /> > CORPO: 02056A0045C60C037777772E6465762E6D6F62692F69735F66756E2E68746D6C0<br /> 011033635333200070103446576446F744D6F62692069732046756E2021000101

The complete message is then:

1
<span><forte>0605040B8423F0</strong><br /> 02056A0045C60C037777772E6465762E6D6F62692F69735F66756E2E68746D6C0<br /> 011033635333200070103446576446F744D6F62692069732046756E2021000101</span>

o Que é 137 caracteres de comprimento (ei, é um binário SMS, Java usa a codificação UTF-8 para mensagens binárias, portanto, o limite de 1 SMS é de 140 caracteres, não estamos legal ?)

A aplicação J2ME

Para ser o mais prático possível, precisamos de um ambiente para ser usado para enviar mensagens SMS para descrever o mundo real, mas como nem todo mundo tem acesso a um gateway SMS com UDHs e uma interface onde digitar o código binário, vamos descrever como fazer o mesmo com uma aplicação J2ME.Aviso legal: quanto às especificações WMA, os aplicativos J2ME não podem acessar portas reservadas especiais para enviar SMS binários tão azaradamente que o aplicativo J2ME no telefone receberá uma exceção de segurança e a mensagem não será entregue.

MIDP2. 0 tem dois métodos que permitem enviar mensagens: um requer uma String, Um requer uma matriz de bytes. Sim, o primeiro é usado para definir o conteúdo do texto, o segundo para definir o conteúdo binário.

método de Texto: setPayloadText(String textualSMS);
método Binário: setPayloadData(byte binarySMS);

, a fim de ser capaz de isntalar o J2ME aplicativo “Over The Air”, compilá-lo com o seu favorito J2ME ambiente (eu gosto do NetBeans com o Mobility Pack), copie-o .JAD E.Jar arquivos para o seu servidor web e personalizar o URL na mensagem Push Wap.

vamos agora escrever uma classe J2ME simples que envia a mensagem:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.wireless.messaging.*;
import java.io.*;
import javax.microedition.io.*;
public class WapPush extends MIDlet {
// Conexão para enviar uma mensagem
privada MessageConnection conn;
public void startApp() {
// Coloque aqui o seu número de telemóvel
String myMobileNumber=”+39335…”;
tente {
/ / crie uma mensagem binária
/ / a porta de destino é expressa usando a notação decimal
isso.conn = (MessageConnection) conector.abrir (“sms: / /” + myMobileNumber+”:2948″);
// especifique que vamos enviar uma mensagem binária
BinaryMessage Bm=(BinaryMessage)conn.newMessage(MessageConnection.BINARY_MESSAGE);
String ourContent=”0605040B8423F0″ +
“02056A0045C60C037777772E6465762E6D6F62692F69735F66756E2E68746D6C0” +
“011033635333200070103446576446F744D6F62692069732046756E2021000101”;
bm.setPayloadData(convertHexToBinary(ourContent));
this.conn.send(bm);
}
// Let’s throw exceptions
catch (IOException ex) {
ex.printStackTrace();
}
catch (Exception ex) {
ex.printStackTrace();
}
/** Este método vem de affinitystudios
* leia http://discussion.forum.nokia.com/forum/member.php?u=56142
* Ele converte Cadeias de dados matriz de caracteres
*/
private static byte convertHexToBinary(String hexData) throws Exception {
Sistema.as.println (“comprimento:” + (hexData.comprimento()/2));
if (hexData.comprimento () % 2 != 0 ) {
throw new Exception(“Deve ser um número par de dígitos hexadecimais” );
}
byte binaryData = new byte;
for (int i = 0; i < binaryData.comprimento; ++I) {
String bytestr = hexData.substring(i*2, i*2+2);
int value;
try {
value = Integer.parseInt(byteStr,16);
}
catch (NumberFormatException e) {
e.printStackTrace();
throw new Exception(“”);
}
binaryData = (byte)value;
}
return binaryData;
}
public void pauseApp() {}
public void destroyApp(boolean incondicional) {}
}

Usando uma linha de gateway de SMS

Como J2ME blocos de muitas mensagens binárias, você pode tentar um portal online para enviar suas mensagens binárias. Muitas empresas fornecem SMS gateway de serviços, e a maioria deles tem uma interface para enviar binários brutos de mensagens SMS (estas são um “plus” para mim), enquanto algumas outras empresas apenas dar-lhe uma interface para definir os campos personalizados e fazer o binário coisas para você.

se você quiser usar um gateway SMS on-line, Lembre-se de ler suas especificações técnicas. Se você deseja instalar um gateway SMS que se conecta a serviços externos (operadoras/operadoras), sugiro o Kannel, que é um software de gateway SMS gratuito e está espalhado por todo o mundo; o Kannel gosta de ter o UDH e o corpo a serem separados.

  1. portas Reservadas e mais: J2ME “Wireless Messaging API” especificações
    http://java.sun.com/products/wma/index.jsp
  2. formato padrão para a OTA conteúdo: Open Mobile Alliance
    http://www.openmobilealliance.org/tech/affiliates/wap/wapindex.html
  3. Como enviar OTA configs, tons de toque e logótipos do operador: NOKIA
    http://www.forum.nokia.com (pesquisa para o “Smart Messaging Specification”)
  4. Como detectar um telefone móvel: WURFL
    http://deviceatlas.com
  5. gateway de Sms software: Kannel
    www.kannel.org

Deixe uma resposta

O seu endereço de email não será publicado.