denne artikkelen vil forklare fra et høyt nivå til et lavere nivå hvordan du skriver en enkel SMS-aktivert mobilapplikasjon som lar deg sende «over the Air installation messages». Etter å ha lest denne artikkelen, vil du kunne lage en liten j2me applet som teoretisk sender seg til en annen telefon ved hjelp AV EN SMS-melding som leveringsmiddel. Faktisk, på grunn av begrensninger I Wireless Messaging API I J2ME (JSR 120/205) porten FOR WAP Push-meldinger er «reservert» av sikkerhetshensyn. Muligheten til å sende innhold via allment støttet SMS-kanal kan være svært nyttig for innholdsleverandører.
SMS-meldinger er lite antall pakkede byte sendt over operatørnettverkene. Mange av dere har allerede opplevd å sende «tekstmeldinger» fra enheter, og mange refererer til å sende SMS-meldinger som»teksting».
en liten teknisk introduksjon TIL SMS
omfanget av denne artikkelen er å være praktisk,så vi vil ikke gå gjennom alle de tekniske og kjedelige detaljene i nettverk, men tre konsepter er ganske viktige forstår om sms.
- SMS bruker begrepet «port» akkurat som en standard internett-stikkontakter gjør;
- SMS-meldinger har en grense i kroppen på 160 tegn;
- kroppen er ikke det eneste du kan spille med I EN SMS, det er Også Brukerdatahodet.
Porter
når du treffer EN URL i nettleseren din, for eksempel http://dev.mobi, kaller du port 80 på en webserver, etter konvensjon. Tilkoblingen vil bli initialisert på port 80 og deretter byttet til en høyere port for å la andre brukere få tilgang til samme port på webserveren. Port 80, som nevnt av IANA refererer TIL HTTP-protokollen, betyr dette at en server, som er i stand til å forstå HTTP-protokollforespørsel, vil bli vekket og vil være klar til å svare på OG behandle HTTP-forespørsler. Det samme skjer MED SMS-meldinger. Du kan sende EN SMS til en bestemt port på en telefon, og du vil våkne opp en bestemt tjeneste på den enheten. Nå, akkurat som ikke alle datamaskiner har standardtjenester (for eksempel en webserver), har ikke alle mobile enheter tjenester som lytter til porter. Dette er en veldig «produsent relatert» ting, så du må sjekke telefonen din hva som er aktivert for å godta.
Kropp og koding
Dette kan være et tøft emne å behandle, men vi vil bare beskrive veldig grunnleggende informasjon som kan være nyttig. SMS standardkoding bruker 7 biter for å håndtere et tegn. Dette betyr at DU kan skrive I EN SMS bare de tegnene som er til stede på et veldig grunnleggende karbord, ja de berømte 127 tegn. Hvis du vil gå mer kompliserte ting og sende flere «interessante» tegn, er det nødvendig med en gruppe på 8 biter, og bordet med tilgjengelige tegn blir større. Den tilgjengelige plassen er 1120 bits PER SMS, ikke mer, ikke mindre. Du kan ha 160 tegn med 7 biter eller 140 tegn med 8 biter
Merk: tegnet » É «er inkludert i «grunntabellen», mens tegnet » È «er i » større tabeller». Hvis du skriver en melding med andre røye, vil du ha mindre plass i meldingen. Så vær oppmerksom på hvilke tegn du bruker når DU sender SMS 😉
Brukerdatahodet
Brukerdatahodet (også kjent SOM UDH) er hva en «high level developer» kan sette mens du skal gjøre noe mer enn en enkel «tekstmelding». EN UDH er veldig nyttig fordi du kan sende «usynlige tekstmeldinger» til mobilapplikasjon (hvor til «mobile applikasjoner» jeg mener de som kjører på mobile enheter for eksempel) eller du kan fortelle en enhet at meldingen vil inneholde spesiell informasjon. Det er veldig lik EN XML-fil: du må fortelle parseren hva du sender, og innholdet etter prolog som vil bli håndtert av parseren selv.
UDH brukes hovedsakelig til å spesifisere hvilke porter vår klient (telefon) vil sende SMS til. Det er laget av et sett med hex tall som beskriver:
<HVOR lenge UDH er > < formatet som brukes til å angi portnumre > < portnummerlengden > < målportnummer > < kildeportnummer >.
som et praktisk eksempel, si at jeg vil lage EN UDH for å sende EN WAP-Push, der standard destinasjonsporten for WAP-push er 2948, VIL UDH være:
1
|
06 05 04 0B 84 23 F0
|
hvor:
- 06 betyr «hei lese følgende 6 byte»
- 05 er formatet for tall, i dette tilfellet heksadesimale tall
- 04 vil fortelle UDH at hver port er representert ved hjelp av 4 tegn
- 0B84 er målporten, 2948 (desimal representasjon) eller 0B84 (heksadesimal representasjon)
- 23F0 er kildeporten, 9200 (desimal representasjon) eller 23f0 (heksadesimal representasjon).
Merk: bruk en enkel kalkulator for å konvertere desimaltall til hex; velg «Dec», sett 2948 i kalkulatoren, og trykk deretter på knappen «Hex». Enhver vitenskapelig kalkulator kan gjøre dette, og mange operativsystemer har et lite» calc » – program et sted som kan gjøre dette.
Binær SMS
en «binær SMS» er EN XML-formatert tekstlig SMS som har blitt forvandlet MED WBXML. WBXML ER en «tagtransformator», dette betyr at for hver XML-tag er en binær byte tilknyttet. For eksempel konverteres taggen < SI > som det binære tegnet & #x0005;
HVORFOR WBXML?
Enkelt svar: resultatet AV en wbxml-transformasjon er mindre i antall genererte byte enn den verbose TEKSTLIGE XML-filen selv.
Merk: mange koder konverteres til byte, men noen ganger kan også innhold (SOM URL-adresser) f.eks. URL http://www.dev.mobi skrives I WBXML som 0Ddev.mobi , hvor» 0D » står for http://www.
» 0C » er mer generisk og står for http: / / slik at DU kan skrive NETTADRESSEN på to måter:
1
|
<span>0Ddev.mobi < / span>
|
eller
1
|
<span>0Cwww.dev.mobi< / span>
|
den første bruker 9 tegn (0D er en byte), den andre 13 tegn! JEG elsker WBXML 🙂
Vilkår
For å være klar, med «WAP push» mener vi ikke en måte å sende SMS ved HJELP AV WAP. Det vi mener er det som er teknisk kjent SOM Si (Serviceindikasjon). En Tjenesteindikasjon er en binær SMS sendt til en dedikert port på en enhet som informerer enheten om at DET er EN URL som venter på å bli besøkt. NETTADRESSEN kan være adressen til en ringetone i en webserver, adressen TIL EN JAD-fil for å installere ET J2ME-program eller EN JPG eller bare EN WAP-side; det er opp til webserverens «webmaster» å sette innholdet på nettstedet, og det er opp til enheten å forstå hvordan man skal håndtere innholdet. For mer informasjon om dette aspektet av puslespillet, vennligst se vår Innholdstilpasningsserie av artikler.
Merk: Når jeg sier «webserver» mener jeg både web og WAP-server siden de fleste webservere kan konfigureres til å levere WAP-innhold. MED «Ota Configuration SMS» mener jeg en binær SMS som inneholder APN-detaljer (men kan inneholde mer) også kjent som»Internet Access Configuration».
Merk: det er spesielle «Service Indikasjon» meldinger som normalt kalles Sl (Service Load) som ligner PÅ «SI». En SI ber om tillatelse til brukeren før du henter innholdet over nettverkstilkoblingen, sl laste ned innholdet automatisk uten å be om tillatelse til brukeren. «SL» er svært lik MMS-meldinger: innholdet er på en webserver OG SMS forteller telefonen for å laste ned meldingen.
Så La Oss Starte
Først og fremst må vi lese noen papirer (dessverre) for å lese noen spesifikasjoner for HVORDAN DU skriver XML-innhold som skal sendes OVER SMS. Et godt startpunkt kan Være Nokias «Smart Messaging Specification 3.0.0» som kan lastes ned 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å våre skritt vil være:
- Bestem hva vi vil sende
- Finn dokumentene om dette emnet
- FINN XML-strukturen i meldingen som skal sendes
- Tilpass XML
- Konverter XML til WBXML
- Klargjør UDH
- send udh og kroppen
som vi vil sende et j2me-program til en ny telefon, må vi sende en «service indication» – melding, Også Kjent Som «wap push». Denne » SI » kan brukes til å presse EN SMS som vil bli lest som en lenke for å laste ned noe. Enhver innholdstype (bilde/jpeg, program/java-arkiv, …) er gyldig hvis telefonen kan åpne den.
Så, hvem kan fortelle hvilke innholdstyper kan en enhet åpne ? DeviceAtlas kan hjelpe oss her! (Se Referanser)
Finn dokumentene om det emnet
Ok, la oss åpne oma-lenken og la oss gå til «Functional area» betegnet «push». La oss få «WAP Service Indikasjon Spesifikasjon». For å forstå HVORDAN WBXML fungerer, vil jeg foreslå å lese avsnitt 8.3.2 «Attributt Start Tokens».
Finn XML-strukturen i meldingen
for de av dere som mer liker Dtder, se på seksjon 7.2. Alle andre kan hoppe over alle doc og gå til lese eksempel på seksjon 9. XML det er ganske selvforklarende, så jeg vil gjøre noen tilpasning direkte.
1
2
3
4
5
6
7
|
<?xml version= «1.0»?>
<!DOCTYPE SI OFFENTLIG «-//WAPFORUM//DTD SI 1.0//NO» «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-attributt |
03 | String starter |
** 36353332 | 6532 |
00 | String ender |
07 | Handlingsattributt (signal-medium) |
01 | Ender av attributter, nå innholdet |
03 | String starter |
* 446576446F744D6F62692069732046756E2021 | DevDotMobi Er Gøy ! |
00 | String ender |
01 | </indikasjon> |
01 | </SI> |
* dette er strenger som brukes til å sende innhold TIL SI, hvert tegn i strengen konverteres til sin heksadesimale representasjon.
** «6532» skal betraktes som en streng med tegn og ikke et tall, så bruk ikke kalkulatoren til å konvertere dette nummeret
kroppen vår er å sette alle tallene sammen:
1
|
02056A0045C60C037777772E6465762E6D6F62692F69735F66756E2E68746D6C0<br />011033635333200070103446576446F744D6F62692069732046756E2021000101
|
(som er 130 tegn)
Forbered UDH
Å Forberede UDH er ganske enkelt. Bare start med «06 05 04» og legg deretter til portnumrene. WAP Push-meldinger bruker «destination port» 2948 mens kildeporten er 9200. Konverter desimalportnumre til heksadesimale formater, så 2948 blir 0B84 og 9200 blir 23F0. MAGISK ER UDH: 06 05 04 0b 84 23 F0
Send SMS og UDH
nå, Hva du trenger å gjøre med dette? Ganske enkelt, bare sette alt sammen og SMS er klar til å bli sendt.
<UDH> + < KROPP>
1
|
UDH: 06 05 04 0B 84 23 F0 < br / > KROPP: 02056A0045C60C037777772E6465762E6D6F62692F69735F66756E2E68746D6C0<br /> 011033635333200070103446576446F744D6F62692069732046756E2021000101
|
The complete message is then:
1
|
<span><sterk>0605040B8423F0</sterk><br /> 02056a0045c60c037777772e6465762e6d6f62692f69735f66756e2e68746d6c0<BR /> 011033635333200070103446576446f744d6f62692069732046756e2021000101</SPAN>
|
Hvilken er 137 tegn lang (hei, det er en binær SMS, Java bruker Utf-8-koding for binære meldinger, så grensen for 1 SMS er 140 tegn, er Vi ikke kule ?)
j2me-applikasjonen
for å være så praktisk som mulig, trenger vi et miljø som skal brukes til å sende SMS-meldinger og for å beskrive den virkelige verden, men som ikke alle har tilgang til EN SMS gateway Med UDHs og et grensesnitt hvor du skal skrive inn binær kode, vil vi beskrive hvordan du gjør det samme med ET j2me-program.
Ansvarsfraskrivelse: Når DET GJELDER wma-spesifikasjoner, KAN J2ME-applikasjoner ikke få tilgang til spesielle reserverte porter for å sende binær SMS, så uheldigvis VIL j2me-applikasjonen i telefonen få et sikkerhetsunntak, og meldingen vil ikke bli levert.
MIDP2.0 har to metoder som gjør det mulig å sende meldinger: en krever En Streng, en krever en rekke byte. Ja, den første brukes til å angi tekstinnhold, den andre til å angi binært innhold.
Tekstmetode: setPayloadText(String textualSMS);
Binær metode: setPayloadData(byte binarySMS);
for å kunne hente j2me-applikasjonen «Over The Air», kompilere den med ditt favoritt j2me-miljø (Jeg liker NetBeans Med Mobilitetspakken), kopier .JAD og .JAR filer til webserveren og tilpasse URL i Wap Push-melding.
La oss nå skrive en enkel j2me klasse som sender meldingen:
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 wappush utvider MIDlet {
/ / Tilkobling for å sende en melding
privat MessageConnection conn;
offentlig ugyldig startApp() {
// Sett her ditt mobilnummer
Streng myMobileNumber= » + 39335…»;
prøv {
// Opprett en binær melding
// Målport uttrykkes ved hjelp av desimalnotasjonen
dette.conn = (MessageConnection) Kontakt.åpne («sms://» +myMobileNumber+»:2948″);
// Angi at vi skal sende en binær melding
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 metoden kommer fra affinitystudios
* les videre http://discussion.forum.nokia.com/forum/member.php?u=56142
* den konverterer Strenger til data array av tegn
*/
privat statisk byte convertHexToBinary (Streng hexData) kaster Unntak {
System.ut.println («Lengde:» +(hexData.lengde()/2));
hvis ( hexData.lengde () % 2 != 0 ) {
kast nytt Unntak («Må være et jevnt antall hex-sifre» );
}
byte binaryData = ny byte;
for (int i = 0; i < binaryData.lengde; ++i) {
Streng 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;
}
offentlig ugyldig pauseApp() {}
offentlig void destroyApp (boolsk ubetinget) {}
}
|
Ved hjelp av EN ONLINE SMS gateway
SOM J2ME blokkerer mange binære meldinger, kan du prøve en online gateway for å sende binære meldinger. Mange selskaper tilbyr SMS gateway-tjenester, og de fleste av dem har et grensesnitt for å sende rå binære SMS-meldinger (dette er et «pluss» for meg) mens noen andre selskaper bare gir deg et grensesnitt for å angi de tilpassede feltene og gjøre de binære tingene for deg.
hvis du vil bruke EN ONLINE SMS gateway, bare husk å lese deres tekniske spesifikasjoner. Hvis DU vil installere DEG EN SMS gateway som kobles til eksterne tjenester (operatører/operatører), foreslår Jeg Kannel, som er en GRATIS SMS gateway-programvare, og den er spredt over hele verden; Kannel liker Å ha UDH og kroppen som skal skilles.
- Reserverte porter og mer: j2me» Wireless Messaging API » spesifikasjoner
http://java.sun.com/products/wma/index.jsp - standard format for OTA innhold: Åpne Mobile Alliance
http://www.openmobilealliance.org/tech/affiliates/wap/wapindex.html - slik sender DU ota configs, ringetoner og operatørlogoer: NOKIA
http://www.forum.nokia.com (seach for «Smart Messaging Specification») - slik oppdager du en mobiltelefon: WURFL
http://deviceatlas.com - Sms gateway programvare: Kannel
www.kannel.org