acest articol va explica de la un nivel înalt la un nivel inferior cum să scrie un simplu SMS-activat aplicație mobilă care vă va permite să trimiteți „peste mesajele de instalare aer”. După ce ați citit acest articol, veți putea crea un mic applet J2ME care teoretic se va trimite la un alt telefon folosind un mesaj SMS ca mijloc de livrare. De fapt, datorită limitărilor din API-ul de mesagerie Wireless din J2ME (JSR 120/205), portul pentru mesajele Push WAP este „rezervat” din motive de securitate. Posibilitatea de a trimite conținut prin canalul SMS acceptat pe scară largă poate fi foarte utilă pentru furnizorii de conținut.
mesajele SMS sunt număr mic de octeți ambalate trimise prin rețelele operatorului. Mulți dintre voi ați experimentat deja trimiterea de ” mesaje text „de pe dispozitive și mulți se referă la trimiterea de mesaje SMS ca”mesaje text”.
o introducere tehnică pic la SMS
domeniul de aplicare al acestui articol este de a fi practic, asa ca nu vom trece prin toate detaliile tehnice și plictisitoare ale rețelelor, dar trei concepte sunt destul de importante nu înțeleg despre sms.
- SMS-ul folosește conceptul de „port” la fel ca o priză standard de internet;
- mesajele SMS au o limită în corpul de 160 de caractere;
- corpul nu este singurul lucru cu care poți să te joci într-un SMS, există și antetul datelor Utilizatorului.
porturi
când atingeți o adresă URL în browser, cum ar fi http://dev.mobi, apelați în mod transparent portul 80 al unui server web, prin convenție. Conexiunea va fi inițializată pe portul 80 și apoi comutată la un port superior pentru a permite altor utilizatori să acceseze același port al serverului web. Portul 80, așa cum a declarat IANA, se referă la protocolul HTTP, ceea ce înseamnă că un server, care este capabil să înțeleagă cererea protocolului HTTP, va fi trezit și va fi gata să răspundă și să proceseze cererile HTTP. Același lucru se întâmplă și cu mesajele SMS. Puteți trimite un SMS către un anumit port al unui telefon și veți trezi un anumit serviciu pe dispozitivul respectiv. Acum, la fel cum nu toate computerele au servicii standard (cum ar fi un server web), de asemenea, nu toate dispozitivele mobile au servicii care ascultă porturile. Acesta este un lucru foarte „legat de producător”, așa că va trebui să verificați telefonul ce este activat pentru a accepta.
corp și codificare
acest lucru ar putea fi un subiect greu pentru a trata, dar vom descrie doar informații foarte de bază, care pot fi utile. Codificarea implicită SMS folosește 7 biți pentru a gestiona un caracter. Aceasta înseamnă că puteți scrie într-un SMS doar acele personaje care sunt prezente pe o masă de caractere foarte de bază, Da acele celebre 127 de caractere. Dacă doriți să faceți lucruri mai complicate și să trimiteți mai multe personaje „interesante”, atunci este nevoie de un grup de 8 biți și tabelul de caractere disponibile devine mai mare. Spațiul disponibil este de 1120 biți pe SMS, nici mai mult, nici mai puțin. Puteți avea 160 de caractere folosind 7 biți sau 140 de caractere folosind 8 biți
notă: în „tabelul de bază” este inclus caracterul „circulant”, în timp ce caracterul „circulant” se află în „tabelele mai mari”. Dacă scrieți un mesaj cu al doilea caracter, atunci veți avea mai puțin spațiu disponibil în mesaj. Deci, să acorde o atenție la care caracterele pe care le utilizați atunci când trimiteți SMS-uri
antet de date utilizator
antetul de date utilizator (de asemenea, cunoscut sub numele de UDH) este ceea ce un „dezvoltator de nivel înalt” poate seta în timp ce pentru a face ceva mai mult decât un simplu „mesaj text”. Un UDH este foarte util deoarece puteți trimite ” mesaje text invizibile „către aplicația mobilă (unde să” aplicații mobile ” mă refer la cele care rulează pe dispozitive mobile, de exemplu) sau puteți spune unui dispozitiv că mesajul va conține informații speciale. Este foarte similar cu un fișier XML: trebuie să spuneți parserului ce trimiteți și conținutul care urmează prologului care va fi gestionat de parserul însuși.
UDH este folosit în principal pentru a specifica ce porturi clientul nostru (telefon) va trimite SMS-uri la. Este realizat de un set de numere hexagonale care descriu:
<cât timp UDH este>< formatul utilizat pentru a specifica numerele porturilor>< lungimea numărului portului>< numărul portului de destinație><numărul portului sursă>.
ca exemplu practic, să zicem că vreau să creez un UDH pentru a trimite o apăsare WAP, unde portul de destinație standard pentru împingerile WAP este 2948, UDH va fi:
1
|
06 05 04 0B 84 23 F0
|
unde:
- 06 înseamnă „Hei citiți următoarele 6 octeți”
- 05 este formatul pentru numere, în acest caz numere hexazecimale
- 04 va spune UDH că fiecare port este reprezentat folosind 4 caractere
- 0b84 este portul de destinație, 2948 (reprezentare zecimală) sau 0B84 (reprezentare hexazecimală)
- 23F0 este format din portul sursă, 9200 (reprezentare zecimală) sau 23f0 (reprezentare hexazecimală).
notă: utilizați un calculator simplu pentru a converti numerele zecimale în hex; selectați „Dec”, puneți 2948 în calculator, apoi apăsați butonul „Hex”. Orice calculator științific poate face acest lucru și multe sisteme de operare au o mică aplicație „calc” undeva care poate face acest lucru.
SMS binar
un „SMS binar” este un SMS textual formatat XML care a fost transformat cu WBXML. WBXML este un” transformator de etichete”, ceea ce înseamnă că pentru fiecare etichetă XML este asociat un octet binar. De exemplu, eticheta <SI > este convertită ca caracter binar & # x0005;
de ce WBXML?
răspuns ușor: rezultatul unei transformări WBXML este mai mic în numărul de octeți generați decât fișierul XML textual detaliat în sine.
notă: multe tag-uri sunt convertite în octeți, dar, uneori, de asemenea, conținutul (cum ar fi adresele URL) de exemplu URL-ul http://www.dev.mobi poate fi scris în WBXML ca 0Ddev.mobi , unde” 0D ” înseamnă http://www.
„0C” este mai generic și standuri pentru http: / / astfel încât să puteți scrie URL-ul în două moduri:
1
|
<span>0Ddev.mobi < / span>
|
sau
1
|
<span> 0Cwww.dev.mobi< / span>
|
primul folosește 9 caractere (0D este un octet), al doilea 13 caractere! Îmi place wbxml
Termeni
pentru a fi clar, prin „WAP push” nu ne referim la o modalitate de a trimite SMS folosind WAP. Ceea ce înțelegem este ceea ce este cunoscut tehnic ca SI (indicație de serviciu). O indicație de serviciu este un SMS binar trimis la un port dedicat pe un dispozitiv care informează dispozitivul că există o adresă URL care așteaptă să fie vizitat. URL-ul poate fi adresa unui ton de apel într-un server web, adresa unui fișier JAD pentru a instala o aplicație J2ME sau un JPG sau pur și simplu o pagină WAP; depinde de „webmaster” al serverului web să pună conținutul pe site-ul web și depinde de dispozitiv să înțeleagă cum să gestioneze conținutul. Pentru mai multe informații despre acest aspect al puzzle-ului, vă rugăm să consultați seria noastră de articole de adaptare a conținutului.
Notă: Când spun „server web” mă refer atât la serverul web, cât și la serverul WAP, deoarece majoritatea serverelor web pot fi configurate pentru a furniza conținut WAP. Prin ” SMS de configurare OTA „mă refer la un SMS binar care conține detalii APN (dar poate conține mai multe), cunoscut și sub numele de”configurare acces la Internet”.
Notă: există mesaje speciale ” Service Indication „care sunt denumite în mod normal SL (Service Load) care sunt similare cu”SI”. Un SI solicită permisiunea utilizatorului înainte de a prelua conținutul prin conexiunea la rețea, SL descarcă automat conținutul fără a cere permisiunea utilizatorului. „SL” sunt foarte asemănătoare cu mesajele MMS: conținutul este pe un server web, iar SMS-ul spune telefonului să descarce mesajul.
deci, să începem
în primul rând, avem nevoie pentru a citi unele lucrări (vai) pentru a citi unele specificații cu privire la modul de a scrie conținut XML pentru a fi trimise prin SMS. Un bun punct de pornire ar putea fi Nokia „Smart Messaging Specification 3.0.0”, care poate fi descărcat de pe www.forum.nokia.com și, de asemenea, mai multe documente tehnice de la Open Mobile Alliance (OMA) de la www.openmobilealliance.org/tech/affiliates/wap/wapindex.html
deci pașii noștri vor fi:
- decideți ce vrem să trimitem
- găsiți documentele despre acest subiect
- găsiți structura XML a mesajului care urmează să fie trimis
- Personalizați XML
- convertiți XML în WBXML
- pregătiți UDH
- trimiteți udh și corpul
deoarece dorim să trimitem o aplicație J2ME către un telefon nou, atunci trebuie să trimitem un mesaj „indicație de serviciu”, cunoscut și sub numele de „WAP Push”. Acest” SI ” poate fi folosit pentru a împinge un SMS care va fi citit ca un link pentru a descărca ceva. Orice tip de conținut (imagine/jpeg, aplicație/arhivă java, …) este valabil dacă telefonul îl poate deschide.
Deci, cine poate spune ce tipuri de conținut poate deschide un dispozitiv ? DeviceAtlas ne poate ajuta aici! (vezi referințe)
găsiți documentele despre acel subiect
Ok, să deschidem linkul OMA și să mergem la „zona funcțională” denumită „push”. Să obținem „specificația indicației serviciului WAP”. Pentru a înțelege cum funcționează WBXML, aș sugera să citiți paragraful 8.3.2 „atribute Start Tokens”.
găsiți structura XML a mesajului
pentru aceia dintre voi care seamănă mai mult cu DTD-urile, uitați-vă la secțiunea 7.2. Toți ceilalți pot sări peste tot docul și pot merge la exemplul citit la Secțiunea 9. XML este destul de auto-explicativ, așa că voi face unele personalizare direct.
1
2
3
4
5
6
7
|
<?versiunea xml=”1.0″?>
<!DOCTYPE si PUBLIC „- //WAPFORUM//DTD SI 1.0 / / ro” ” 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 se termină |
11 | si-id atribut |
03 | șir începe |
** 36353332 | 6532 |
00 | String se termină |
07 | atribut de acțiune (semnal-mediu) |
01 | sfârșitul atributelor, acum conținutul |
03 | șir începe |
* 446576446f744d6f62692069732046756e2021 | DevDotMobi este distractiv ! |
00 | String se termină |
01 | </indicație> |
01 | </SI> |
* acestea sunt șiruri folosite pentru a trece conținutul la SI, fiecare caracter din șir este convertit în reprezentarea sa hexazecimală.
** „6532” trebuie considerat un șir de caractere și nu un număr, așa că nu folosiți calculatorul pentru a converti acest număr
corpul nostru este, punând toate numerele împreună:
1
|
02056A0045C60C037777772E6465762E6D6F62692F69735F66756E2E68746D6C0<br />011033635333200070103446576446F744D6F62692069732046756E2021000101
|
(care este de 130 de caractere)
pregătiți UDH
pregătirea UDH este destul de ușoară. Începeți doar cu „06 05 04” și apoi adăugați numerele de port. Mesajele Push Wap utilizează „portul de destinație” 2948, în timp ce portul sursă este 9200. Convertiți numerele de port zecimale în formate hexazecimale, astfel încât 2948 devine 0B84 și 9200 devine 23f0. Magic, UDH este: 06 05 04 0B 84 23 F0
trimite SMS-ul și UDH
acum, Ce trebuie să faci cu asta? Destul de simplu, puneți totul împreună și SMS-ul este gata să fie trimis.
<UDH> + < corp>
1
|
UDH: 06 05 04 0B 84 23 F0<br / >corp: 02056A0045C60C037777772E6465762E6D6F62692F69735F66756E2E68746D6C0<br /> 011033635333200070103446576446F744D6F62692069732046756E2021000101
|
The complete message is then:
1
|
<span><strong>0605040B8423F0</strong><br /> 02056a0045c60c037777772e6465762e6d6f62692f69735f66756e2e68746d6c0<br /> 011033635333200070103446576446f744d6f62692069732046756e2021000101</durata>
|
care este 137 caractere lungi (hei, este un SMS binar, Java foloseste UTF-8 codare pentru mesaje binare, astfel încât limita pentru 1 SMS este de 140 caractere, nu suntem cool ?)
aplicația J2ME
pentru a fi cât mai practic posibil, vom avea nevoie de un mediu care să fie folosit pentru a trimite mesaje SMS și pentru a descrie lumea reală, dar, deoarece nu toată lumea are acces la un gateway SMS cu UDHs și o interfață în care să introduceți cod binar, vom descrie cum să facem același lucru cu o aplicație J2ME.
Disclaimer: În ceea ce privește specificațiile WMA, aplicațiile J2ME nu pot accesa porturile rezervate speciale pentru a trimite SMS-uri binare, astfel încât aplicația J2ME din telefon va primi o excepție de securitate și mesajul nu va fi livrat.
MIDP2.0 are două metode care permit trimiterea de mesaje: unul necesită un șir, unul necesită o serie de octeți. Da, primul este folosit pentru a seta conținutul textului, al doilea pentru a seta conținutul binar.
metoda Text: setPayloadText (String textualSMS);
metoda binară: setPayloadData (byte binarySMS);
pentru a putea intall aplicația J2ME „Over the Air”, compilați-l cu mediul dvs. preferat J2ME (îmi place NetBeans cu pachetul de mobilitate), copiați .JAD și .Fișierele JAR pe serverul dvs. web și personalizați adresa URL în mesajul Push Wap.
să scriem acum o clasă J2ME simplă care trimite mesajul:
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 extinde MIDlet {
// conexiune pentru a trimite un mesaj
private MessageConnection conn;
public void startApp() {
// puneți aici numărul dvs. de telefon mobil
String myMobileNumber=”+39335…”;
încercați {
/ / creați un mesaj binar
/ / portul de destinație este exprimat folosind notația zecimală
acest lucru.conn = (MessageConnection) conector.deschis („sms://” +myMobileNumber+”:2948″);
// specificați că vom trimite un mesaj binar
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();
}
/** această metodă vine de la affinitystudios
* citiți mai departe http://discussion.forum.nokia.com/forum/member.php?u=56142
* acesta convertește siruri de caractere pentru matrice de date de caractere
*/
convertHexToBinary Byte static privat (Hexdata șir) aruncă excepție {
sistem.afară.println („lungime:” +(hexData.lungime()/2));
dacă (hexData.lungime () % 2 != 0 ) {
arunca nouă excepție („trebuie să fie un număr par de cifre hex” );
}
byte binaryData = octet nou;
pentru (int i = 0; i < binaryData.lungime; ++i) {
șir 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;
}
publice void pauseApp() {}
publice vid destroyApp (boolean necondiționată) {}
}
|
folosind un gateway SMS online
deoarece J2ME blochează multe mesaje binare, puteți încerca un gateway online pentru a vă trimite mesajele binare. Multe companii oferă servicii de gateway SMS, iar cele mai multe dintre ele au o interfață pentru a trimite mesaje SMS binare brute (acestea sunt un „plus” pentru mine), în timp ce alte companii vă oferă doar o interfață pentru a seta câmpurile personalizate și pentru a face lucrurile binare pentru dvs.
dacă doriți să utilizați un gateway SMS online, nu uitați să citiți specificațiile tehnice ale acestora. Dacă doriți să vă instalați un gateway SMS care se conectează la servicii externe (operatori/operatori), vă sugerez Kannel, care este un software gratuit SMS gateway și este răspândit în întreaga lume; Kannel îi place să aibă UDH și corpul să fie separat.
- porturi rezervate și mai mult: J2ME „Wireless Messaging API” specificații
http://java.sun.com/products/wma/index.jsp - format standard pentru conținutul OTA: Open Mobile Alliance
http://www. openmobilealliance.org/tech/affiliates/wap/wapindex.html - cum să trimiteți configs OTA, tonuri de apel și logo-uri operator: NOKIA
http://www. forum.nokia.com (seach pentru „specificația de mesagerie inteligentă”) - cum se detectează un telefon mobil: WURFL
http://deviceatlas.com - software-ul SMS gateway: Kannel
www.kannel.org