binær SMS: afsendelse af rigt indhold til enheder ved hjælp af SMS

denne artikel forklarer fra et højt niveau til et lavere niveau, hvordan man skriver en simpel SMS-aktiveret mobilapplikation, som giver dig mulighed for at sende “over Luftinstallationsmeddelelser”. Efter at have læst denne artikel vil du være i stand til at oprette en lille J2ME-applet, som teoretisk vil sende sig til en anden telefon ved hjælp af en SMS-besked som leveringsmiddel. På grund af begrænsninger i den trådløse Messaging API i J2ME (JSR 120/205) er porten til Push-meddelelser “reserveret” af sikkerhedsmæssige årsager. Evnen til at sende indhold via den bredt understøttede SMS-kanal kan være meget nyttig for indholdsudbydere.

SMS-beskeder er et lille antal pakkede byte, der sendes over operatørnetværkene. Mange af jer har allerede oplevet at sende “tekstbeskeder” fra enheder, og mange henviser til at sende SMS-beskeder som “SMS”.

en lille teknisk introduktion til SMS

omfanget af denne artikel skal være praktisk, så vi vil ikke gennemgå alle de tekniske og kedelige detaljer i netværk, men tre koncepter er ret vigtige forstår om sms.

  • SMS bruger begrebet “port” ligesom en standard internetstik gør;
  • SMS-beskeder har en grænse i kroppen på 160 tegn;
  • kroppen er ikke det eneste, du kan lege med i en SMS, der er også Brugerdataoverskriften.

Porte

når du rammer en URL i din bro.ser som http://dev.mobi, kalder du gennemsigtigt port 80 på en internetserver efter konvention. Forbindelsen initialiseres på port 80 og skiftes derefter til en højere port for at lade andre brugere få adgang til den samme port på internetserveren. Port 80, som anført af IANA henviser til HTTP-protokollen, betyder det, at en server, som er i stand til at forstå HTTP-protokolanmodning, vil blive vækket og vil være klar til at besvare og behandle HTTP-anmodninger. Det samme sker med SMS-beskeder. Du kan sende en SMS til en bestemt port på en telefon, og du vil vække en bestemt tjeneste på den enhed. Nu, ligesom ikke alle computere har standardtjenester (såsom en internetserver), har heller ikke alle mobile enheder tjenester, der lytter til Porte. Dette er en meget “producent relateret” ting, så du bliver nødt til at tjekke din telefon, hvad der er aktiveret til at acceptere.

krop og kodning

dette kunne være et svært emne at behandle, men vi vil bare beskrive meget grundlæggende oplysninger, som kan være nyttige. SMS standardkodning bruger 7 bits til at håndtere et tegn. Det betyder, at du kun kan skrive i en SMS de tegn, der er til stede på et meget grundlæggende char-bord, ja de berømte 127 tegn. Hvis du vil gå mere komplicerede ting og sende flere “interessante” tegn, er der brug for en gruppe på 8 bits, og tabellen med tilgængelige tegn bliver større. Den ledige plads er 1120 bits pr. Du kan have 160 tegn ved hjælp af 7 bits eller 140 tegn ved hjælp af 8 bits

Bemærk: tegnet “larg” er inkluderet i “basic table”, mens tegnet “larg” er i “bigger tables”. Hvis du skriver en besked med den anden char, har du mindre plads til rådighed i meddelelsen. Så vær opmærksom på, hvilke tegn du bruger, når du sender SMS-brev

Brugerdatahoved

Brugerdatahovedet (også kendt som UDH) er, hvad en “udvikler på højt niveau” kan indstille, mens man gør noget mere end en simpel “tekstbesked”. En UDH er meget nyttig, fordi du kan sende “usynlige tekstbeskeder” til mobilapplikation (hvor til “mobile applikationer” mener jeg dem, der kører på mobile enheder for eksempel), eller du kan fortælle en enhed, at meddelelsen vil indeholde specielle oplysninger. Det er meget lig en: du skal fortælle parseren, hvad du sender, og indholdet efter prolog, som vil blive håndteret af parseren selv.

UDH bruges hovedsageligt til at specificere, hvilke porte vores klient (telefon) sender SMS til. Det er lavet af et sæt sekskantnummer, der beskriver:

<hvor længe UDH er> <det format, der bruges til at specificere portnumre> <portnummerlængden> <destinationsportnummer> <kildeportnummer>.

som et praktisk eksempel, siger jeg, at jeg vil oprette en UDH for at sende et VAP-skub, hvor standard destinationsporten til VAP-skubber er 2948, vil UDH være:

1
06 05 04 0B 84 23 F0

hvor:

  • 06 betyder “hey den læse følgende 6 bytes”
  • 05 er formatet for tal, i dette tilfælde geksadecimale tal
  • 04 vil fortælle UDH, at hver port er repræsenteret ved hjælp af 4 tegn
  • 0B84 er destinationsporten, 2948 (decimal repræsentation) eller 0B84 (geksadecimal repræsentation)
  • 23F0 er den Kildeporten, 9200 (decimalrepræsentation) eller 23f0 (seksadecimal repræsentation).

Bemærk: Brug en simpel lommeregner til at konvertere decimaltal til sekskant; vælg “Dec”, læg 2948 i lommeregneren, og tryk derefter på knappen “sekskant”. Enhver videnskabelig lommeregner kan gøre dette, og mange operativsystemer har en lille “calc” – applikation et eller andet sted, der kan gøre dette.

binær SMS

en “binær SMS” er en TEKSTFORMATERET SMS, der er blevet transformeret med binær sms. “Tag transformer”, hvilket betyder, at for hvert tag er en binær byte forbundet. For eksempel er tagget <SI> konverteret som det binære tegn & # 0005;

hvorfor?

let svar: resultatet af en transformation er mindre i antallet af genererede bytes end selve tekstfilen.

Bemærk: mange tags konverteres til bytes, men nogle gange også indhold (såsom URL-adresser), f.eks. kan URL ‘en http://www.dev.mobi skrives i 0Ddev.mobi , hvor” 0D ” står for http://www.

” 0C “er mere generisk og står for http: / / så du kan skrive URL’ en på to måder:

1
<spændvidde>0Ddev.mobi < / span>

eller

1
<spændvidde > 0.dev.mobi< / span>

den første bruger 9 tegn (0D er en byte), den anden 13 tegn! Jeg elsker at sende SMS ‘ er

Vilkår

for at være klar, ved “VAP push” mener vi ikke en måde at sende SMS ved hjælp af VAP. Hvad vi mener er, hvad der er teknisk kendt som SI (Service indikation). En Serviceindikation er en binær SMS sendt til en dedikeret port på en enhed, der informerer enheden om, at der er en URL, der venter på at blive besøgt. URL ‘ en kan være adressen på en ringetone i en internetserver, adressen på en JAD-fil for at installere en J2ME-applikation eller en JPG eller blot en VAP-side; det er op til “internetmaster” på internetserveren at placere indholdet på hjemmesiden, og det er op til enheden at forstå, hvordan man håndterer indholdet. For mere information om dette aspekt af puslespillet, henvises til vores indhold tilpasning serie af artikler.

Bemærk: Når jeg siger “internetserver”, mener jeg både internetserver og internetserver, da de fleste internetservere kan konfigureres til at levere internetindhold. Med “Ota Configuration SMS” mener jeg en binær SMS, der indeholder APN-detaljer (men kan indeholde mere), også kendt som “Internetadgangskonfiguration”.

Bemærk: Der er særlige “service indikation” meddelelser, som normalt kaldes SL (Service Load), som ligner “SI”. En SI beder om tilladelse til brugeren, før du henter indholdet via netværksforbindelsen, SL Hent indhold automatisk uden at bede om tilladelse til brugeren. “SL” ligner meget MMS-beskeder: indholdet er på en internetserver, og SMS ‘ en fortæller telefonen at hente beskeden.

så lad os starte

først og fremmest skal vi læse nogle papirer (desværre) for at læse nogle specifikationer for, hvordan man skriver indhold, der skal sendes via SMS. Et godt udgangspunkt kunne være Nokias “Smart Messaging Specification 3.0.0”, som kan hentes fra www.forum.nokia.com og også flere tekniske dokumenter fra Open Mobile Alliance (Oma) fra www.openmobilealliance.org/tech/affiliates/wap/wapindex.html

så vores skridt vil være:

  • Beslut, hvad vi vil sende
  • Find dokumenterne om dette emne
  • Find strukturen i den meddelelse, der skal sendes
  • Tilpas den
  • Konverter den til den
  • Forbered UDH
  • send udh og kroppen

da vi vil sende en J2ME-applikation til en ny telefon, skal vi sende en “serviceindikation” – meddelelse, også kendt som “Vap push”. Denne ” SI ” kan bruges til at skubbe en SMS, der vil blive læst som et link til at hente noget. Enhver indholdstype (billede/jpeg, applikation/java-arkiv, …) er gyldig, hvis telefonen kan åbne den.

så hvem kan fortælle, hvilke indholdstyper en enhed kan åbne ? DeviceAtlas kan hjælpe os her! (se referencer)

Find dokumenterne om det emne

Ok, lad os åbne oma-linket og lad os gå til “funktionelt område” betegnet “push”. Lad os få “VAP service indikation specifikation “. For at forstå, hvordan det virker, vil jeg foreslå at læse punkt 8.3.2 “attribut Start Tokens”.

find strukturen af meddelelsen

for dem af jer, der mere som DTD ‘ er, Se afsnit 7.2. Alle andre kan springe hele dokumentet over og gå til læseeksemplet i Afsnit 9. Der er ret selvforklarende, så jeg vil gøre nogle tilpasninger direkte.

1
2
3
4
5
6
7

<?Version=”1.0″?>
<!DOCTYPE si offentlig” – //VAPFORUM//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 String ender
11 si-id attribut
03 String starter
** 36353332 6532
00 String ender
07 handling attribut (signal-medium)
01 ender af attributter, nu indholdet
03 String starter
* 446576446F744D6F62692069732046756E2021 DevDotMobi er sjovt !
00 String ender
01 </indikation>
01 </SI>

* dette er strenge, der bruges til at overføre indhold til SI, hvert tegn i strengen konverteres til dets seksadecimale repræsentation.
* * “6532” skal betragtes som en streng af tegn og ikke et tal, så brug ikke lommeregneren til at konvertere dette nummer

vores krop er at sætte alle numrene sammen:

1
02056A0045C60C037777772E6465762E6D6F62692F69735F66756E2E68746D6C0<br />011033635333200070103446576446F744D6F62692069732046756E2021000101

(hvilket er 130 tegn)

Forbered UDH

forberedelse af UDH er ret let. Bare start med “06 05 04” og tilføj derefter portnumrene. “Destinationsport “2948, mens Kildeporten er 9200. Konverter decimal portnumre til seksadecimale formater, så 2948 bliver 0B84 og 9200 bliver 23f0. Magisk er UDH: 06 05 04 0B 84 23 F0

Send SMS og UDH

nu, hvad skal du gøre med dette? Temmelig simpelt, bare sæt alt sammen, og SMS ‘ en er klar til at blive sendt.

<UDH> + <krop>

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

The complete message is then:

1
<span><stærk>0605040B8423F0</stærk><br /> 02056a0045c60c037777772e6465762e6d6f62692f69735f66756e2e68746d6c0<br /> 011033635333200070103446576446f744d6f62692069732046756e2021000101</spændvidde>

hvilket er 137 tegn langt (hej, det er en binær SMS, Java bruger UTF-8-kodning til binære meddelelser, så grænsen for 1 SMS er 140 tegn, er vi ikke seje ?)

J2ME-applikationen

for at være så praktisk som muligt har vi brug for et miljø, der skal bruges til at sende SMS-beskeder og til at beskrive den virkelige verden, men da ikke alle har adgang til en SMS-port med UDHs og en grænseflade, hvor man skal indtaste binær kode, vil vi beskrive, hvordan man gør det samme med en J2ME-applikation.

ansvarsfraskrivelse: med hensyn til VMA-specifikationer kan J2ME-applikationer ikke få adgang til specielle reserverede porte for at sende binær SMS, så uheldigvis får J2ME-applikationen i telefonen en sikkerhedsundtagelse, og meddelelsen vil ikke blive leveret.

MIDP2.0 har to metoder, der gør det muligt at sende beskeder: man kræver en streng, man kræver en række bytes. Ja, den første bruges til at indstille tekstindhold, den anden til at indstille binært indhold.

Tekstmetode: setpayloadtekst(Strengtekstsms);
binær metode: setPayloadData(byte binarySMS);

for at være i stand til at integrere J2ME-applikationen “over luften”, kompilere den med dit foretrukne J2ME-miljø (jeg kan godt lide NetBeans med Mobilitetspakken), kopier .JAD og .JAR filer til din internetserver og tilpasse URL ‘ en i Vap Push besked.

lad os nu skrive en simpel J2ME klasse, der sender beskeden:

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.*;
offentlig klasse Vappush udvider MIDlet {
/ / forbindelse til at sende en besked
privat Meddelelseforbindelse conn;
offentlig ugyldig startApp() {
// sæt her dit mobilnummer
String myMobileNumber=”+39335…”;
prøv {
// Opret en binær besked
// destinationsport udtrykkes ved hjælp af decimalnotationen
dette.conn=(MessageConnection) stik.åben (“sms: / /” + mymobilnummer+”:2948″);
// Angiv, at vi skal sende en binær besked
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();
}
/** denne metode kommer fra affinitystudios
* læs videre http://discussion.forum.nokia.com/forum/member.php?u=56142
* det konverterer strenge til data array af tegn
*/
privat statisk byte convertekstobinary (streng seksdata) kaster undtagelse {
System.uden.println (“Længde:” +(seksdata.længde()/2));
hvis (seksdata.længde () % 2!= 0 ) {
kast ny undtagelse (“skal være et lige antal sekskantede cifre” );
}
byte binaryData = ny byte;
til (int i = 0; jeg < binaryData.længde; ++i) {
String byteStr = heksdata.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;
}
offentlig void pauseApp() {}
offentlig void destroyApp (boolsk ubetinget) {}
}

brug af en online SMS-Port

da J2ME blokerer for mange binære beskeder, kan du prøve en online port til at sende dine binære beskeder. Mange virksomheder leverer SMS-tjenester, og de fleste af dem har en grænseflade til at sende rå binære SMS-beskeder (disse er et “plus” for mig), mens nogle andre virksomheder bare giver dig en grænseflade til at indstille de tilpassede felter og lave de binære ting til dig.

hvis du vil bruge en online SMS-port, skal du bare huske at læse deres tekniske specifikationer. Hvis du vil installere dig selv en SMS-port, der opretter forbindelse til eksterne tjenester (transportører/operatører), foreslår jeg Kannel, som er et gratis SMS-portprogram, og det er spredt over hele verden; Kannel kan lide at have UDH og kroppen, der skal adskilles.

  1. reserverede porte og mere: J2ME” trådløs Messaging API ” SPECIFIKATIONER
    http://java.sun.com/products/wma/index.jsp
  2. standardformat for OTA indhold: Open Mobile Alliance
    http://www. openmobilealliance.org/tech/affiliates/wap/wapindex.html
  3. Sådan sender du OTA configs, ringetoner og operatørlogoer: NOKIA
    http://www. forum.nokia.com (Søg efter “Smart Messaging Specification”)
  4. Sådan registreres en mobiltelefon:
    http://deviceatlas.com
  5. Kannel
    www.kannel.org

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.