ez a cikk elmagyarázza a magas szintű alacsonyabb szinten, hogyan kell írni egy egyszerű SMS-képes mobil alkalmazás, amely lehetővé teszi, hogy küldjön “Over the Air telepítési üzenetek”. A cikk elolvasása után létrehozhat egy kis J2ME kisalkalmazást,amely elméletileg SMS-t küld egy másik telefonra kézbesítési eszközként. Valójában a J2ME (JSR 120/205) vezeték nélküli üzenetküldő API korlátozásai miatt a WAP Push üzenetek portja biztonsági okokból “fenntartva” van. A tartalom küldése a széles körben támogatott SMS csatornán keresztül nagyon hasznos lehet a tartalomszolgáltatók számára.
az SMS üzenetek kis számú csomagolt bájtok, amelyeket az operátori hálózatokon küldenek. Sokan már tapasztalták a “szöveges üzenetek” küldését az eszközökről, sokan pedig az SMS-üzenetek küldését “SMS-nek”nevezik.
egy kis technikai Bevezetés Az SMS-be
ennek a cikknek a célja, hogy praktikus legyen, ezért nem megyünk át a hálózatok összes technikai és unalmas részletén, de három fogalom nagyon fontos megérteni az sms-t.
- az SMS a “port” fogalmát ugyanúgy használja, mint a szokásos internetes aljzatok;
- az SMS-ek testének határa 160 karakter;
- a test nem az egyetlen dolog, amellyel SMS-ben játszhat, ott van a felhasználói adatok fejléc is.
portok
amikor bejön egy URL-t a böngészőben, mint például http://dev.mobi, akkor átláthatóan hívja a webszerver 80-as portját, a konvenció szerint. A kapcsolat a 80-as porton inicializálódik, majd egy magasabb portra vált, hogy más felhasználók hozzáférhessenek a webszerver ugyanazon portjához. A 80-as Port, amint azt az IANA állítja, a HTTP protokollra utal, ez azt jelenti, hogy egy szerver, amely képes megérteni a HTTP protokoll kérését, felébred, és készen áll a HTTP kérések megválaszolására és feldolgozására. Ugyanez történik az SMS-ekkel is. SMS-t küldhet a telefon egy adott portjára, és egy adott szolgáltatást ébreszt fel az eszközön. Most, csakúgy, mint nem minden számítógép rendelkezik szabványos szolgáltatásokkal (például webszerverrel), nem minden mobil eszköz rendelkezik portokat hallgató szolgáltatással. Ez egy nagyon “gyártóval kapcsolatos” dolog, ezért ellenőriznie kell a telefonját, hogy mi engedélyezett az elfogadáshoz.
test és kódolás
ezt a témát nehéz kezelni, de csak nagyon alapvető információkat fogunk leírni, amelyek hasznosak lehetnek. Az SMS alapértelmezett kódolása 7 bitet használ egy karakter kezelésére. Ez azt jelenti, hogy SMS-ben csak azokat a karaktereket írhatja, amelyek egy nagyon alapvető karaktertáblán vannak jelen, igen, azok a híres 127 karakter. Ha bonyolultabb dolgokat szeretne küldeni, és több “érdekes” karaktert szeretne küldeni, akkor egy 8 bites csoportra van szükség, és a rendelkezésre álló karakterek táblázata nagyobb lesz. A rendelkezésre álló hely 1120 bit / SMS, nem több, nem kevesebb. Lehet 160 karakter 7 bit használatával, vagy 140 karakter 8 Bit használatával
Megjegyzés: A “argentinok” karakter szerepel az “alaptáblázatban”, míg az “argentinok” karakter a “nagyobb táblázatokban”található. Ha üzenetet ír a második karakterrel, akkor kevesebb hely áll rendelkezésre az üzenetben. Tehát figyeljen arra, hogy mely karaktereket használja az SMS küldésekor ..
felhasználói adatok fejléc
a felhasználói adatok fejlécét (más néven UDH-t) egy “magas szintű Fejlesztő” beállíthatja, miközben valami többet tesz, mint egy egyszerű “szöveges üzenet”. Az UDH nagyon hasznos, mert “láthatatlan szöveges üzeneteket” küldhet a mobilalkalmazásnak (ahol a “mobilalkalmazásokra” gondolok például a mobil eszközökön futókra), vagy megmondhatja egy eszköznek, hogy az üzenet speciális információkat tartalmaz. Nagyon hasonlít egy XML fájlhoz: el kell mondanod az elemzőnek, hogy mit küldesz, valamint a prolog utáni tartalmat, amelyet maga az elemző kezel.
az UDH elsősorban annak meghatározására szolgál, hogy ügyfelünk (telefon) milyen portokra küldi az SMS-t. Ez által egy sor hexadecimális szám, amely leírja:
<mennyi ideig tart az UDH >< a portok számának megadására használt formátum>< a portszám hossza>< célport száma><forrásport száma>.
gyakorlati példaként mondjuk, hogy UDH-t akarok létrehozni egy WAP-Push küldéséhez, ahol a WAP-tolások standard célportja 2948, az UDH lesz:
1
|
06 05 04 0B 84 23 F0
|
ahol:
- 06 azt jelenti: “Hé, olvassa el a következő 6 bájtot”
- 05 A számok formátuma, ebben az esetben a hexadecimális számok
- 04 megmondja az UDH-nak, hogy minden port 4 karakterrel van ábrázolva
- 0B84 a célport, 2948 (decimális ábrázolás) vagy 0B84 (hexadecimális ábrázolás)
- 23f0 a forrásport, 9200 (decimális ábrázolás) vagy 23f0 (hexadecimális ábrázolás).
megjegyzés: egy egyszerű számológép segítségével konvertálja a tizedes számokat hexává; válassza a “Dec” lehetőséget, tegye a 2948-at a számológépbe, majd nyomja meg a “Hex”gombot. Bármely tudományos számológép képes erre, és sok operációs rendszernek van egy kis “calc” alkalmazása valahol, amely képes erre.
bináris SMS
a “bináris SMS” egy XML formátumú szöveges SMS, amelyet átalakítottak WBXML. A WBXML egy “tag transzformátor”, ez azt jelenti, hogy minden XML címkéhez bináris bájt társul. Például a <SI> címke bináris karakterként konvertálódik 
miért WBXML?
egyszerű válasz: a WBXML transzformáció eredménye kisebb a generált bájtok számában, mint maga a bőbeszédű szöveges XML fájl.
Megjegyzés: sok címke bájtokká konvertálódik, de néha tartalmak (például URL-címek) is, például a http://www.dev.mobi URL WBXML-ben írható 0Ddev.mobi , ahol a” 0D ” jelentése http://www.
a”0C” általánosabb, és a http:// rövidítése, így az URL-t kétféle módon írhatja:
1
|
<span>0Ddev.mobi < / span>
|
vagy
1
|
<span> 0Cwww.dev.mobi< / span>
|
az első 9 karaktert használ (0D egy bájt), a második 13 karaktert! Szeretem a WBXML xhamstereket
kifejezések
hogy világos legyen, a “WAP push” alatt nem azt értjük, hogy SMS-t küldünk WAP használatával. Ez alatt azt értjük, amit technikailag SI (szolgáltatás jelzése) néven ismerünk. A szolgáltatás jelzése egy bináris SMS, amelyet egy eszköz dedikált portjára küldenek, amely tájékoztatja az eszközt arról, hogy van egy URL, amely látogatásra vár. Az URL lehet egy csengőhang címe egy webszerverben, egy Jad fájl címe egy J2ME alkalmazás telepítéséhez, egy JPG vagy egyszerűen egy WAP oldal; a webszerver “webmesterének” kell elhelyeznie a tartalmat a webhelyen, és az eszköz feladata, hogy megértse, hogyan kell kezelni a tartalmat. További információ a puzzle ezen aspektusáról, kérjük, olvassa el a tartalom adaptációs cikksorozatunkat.
megjegyzés: amikor azt mondom, hogy “webszerver”, akkor mind a web -, mind a WAP-kiszolgálóra gondolok, mivel a legtöbb webszerver konfigurálható WAP-tartalom szolgáltatására. Az “OTA konfigurációs SMS” alatt egy bináris SMS-t értek, amely APN-részleteket tartalmaz (de többet is tartalmazhat), más néven “Internet-hozzáférési konfiguráció”.
Megjegyzés: vannak speciális “szerviz jelzés” üzenetek, amelyeket általában SL-nek (Service Load) hívnak, amelyek hasonlóak az “SI” – hez. Az SI engedélyt kér a felhasználótól, mielőtt letölti a tartalmat a hálózati kapcsolaton keresztül, az SL automatikusan letölti a tartalmat anélkül, hogy engedélyt kérne a felhasználótól. Az” SL ” nagyon hasonlít az MMS-üzenetekhez: a tartalom egy webszerveren található, az SMS pedig azt mondja a telefonnak, hogy töltse le az üzenetet.
Tehát kezdjük
először is el kell olvasnunk néhány papírt (sajnos), hogy elolvassuk az SMS-ben küldendő XML-tartalom írásának néhány specifikációját. Egy jó kiindulási pont lehet A Nokia “Smart Messaging Specification 3.0.0”, amely letölthető www.forum.nokia.com valamint több technikai dokumentum az Open Mobile Alliance (OMA) – tól www.openmobilealliance.org/tech/affiliates/wap/wapindex.html
tehát lépéseink lesznek:
- döntsd el, hogy mit akarunk küldeni
- keresse meg a dokumentumok arról, hogy a téma
- keresse meg az XML szerkezete az üzenetet küldeni
- testre az XML
- átalakítani az XML WBXML
- készítse elő az UDH
- küldje el az UDH-t és a testet
mivel egy J2ME alkalmazást szeretnénk küldeni egy új telefonra, akkor el kell küldenünk egy “szolgáltatás jelzése” üzenetet, más néven “WAP Push”. Ez a ” SI ” lehet használni, hogy álljon egy SMS, hogy lesz olvasni, mint egy linket letölteni valamit. Bármely tartalomtípus (image/jpeg, application/java-archive, …) érvényes, ha a telefon meg tudja nyitni.
tehát ki tudja megmondani, hogy milyen tartalomtípusokat nyithat meg egy eszköz ? DeviceAtlas segíthet nekünk itt! (lásd a hivatkozásokat)
keresse meg a témával kapcsolatos dokumentumokat
Ok, nyissuk meg az OMA linket, és menjünk a “push” jelöléssel ellátott “funkcionális területre”. Szerezzük be a “WAP szolgáltatás jelzéseinek specifikációját”. Annak érdekében, hogy megértsük, hogyan működik a WBXML, azt javaslom, hogy olvassa el a 8.3.2 bekezdést “attribútum kezdő tokenek”.
keresse meg az üzenet XML szerkezetét
azoknak, akik jobban hasonlítanak a DTD-kre, nézze meg a 7.2 szakaszt. Az összes többi kihagyhatja az összes dokumentumot, és a 9.szakasz olvasási példájához léphet. Az XML elég magától értetődő, ezért közvetlenül testreszabom.
1
2
3
4
5
6
7
|
<?xml verzió= “1.0”?>
<!DOCTYPE si PUBLIC “- / / WAPFORUM / / DTD SI 1.0 / / HU “” 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 vége |
11 | si-id attribútum |
03 | a karakterlánc elindul |
** 36353332 | 6532 |
00 | String vége |
07 | Action attribútum (jel-közepes) |
01 | az attribútumok vége, most A tartalom |
03 | a karakterlánc elindul |
* 446576446F744D6F62692069732046756E2021 | DevDotMobi szórakoztató ! |
00 | String vége |
01 | </javallat> |
01 | </SI> |
* ezek olyan karakterláncok, amelyeket a tartalom átadására használnak az SI-nek, a karakterlánc minden karakterét átalakítják hexadecimális ábrázolásává.
** a “6532” karakterláncnak tekinthető, nem pedig számnak, ezért ne használja a számológépet ennek a számnak a konvertálásához
testünk az, az összes számot összerakva:
1
|
02056A0045C60C037777772E6465762E6D6F62692F69735F66756E2E68746D6C0<br />011033635333200070103446576446F744D6F62692069732046756E2021000101
|
(ami 130 karakter)
készítse elő az UDH-t
az UDH előkészítése nagyon egyszerű. Csak kezdje a “06 05 04” – vel, majd adja hozzá a portszámokat. A WAP Push üzenetek a 2948-as “célportot” használják, míg a forrásport 9200. Konvertálja a decimális portszámokat hexadecimális formátumba, így a 2948 0b84, a 9200 pedig 23f0 lesz. Varázslatosan az UDH: 06 05 04 0b 84 23 F0
küldje el az SMS-t és az UDH
most mit kell tennie ezzel? Elég egyszerű, csak tedd össze mindent, és az SMS készen áll a küldésre.
<UDH> + < test>
1
|
UDH: 06 05 04 0B 84 23 F0 < br / > karosszéria: 02056A0045C60C037777772E6465762E6D6F62692F69735F66756E2E68746D6C0<br /> 011033635333200070103446576446F744D6F62692069732046756E2021000101
|
The complete message is then:
1
|
<span><erős>0605040B8423F0</erős><br /> 02056a0045c60c037777772e6465762e6d6f62692f69735f66756e2e68746d6c0<br /> 011033635333200070103446576446f744d6f62692069732046756e2021000101</span>
|
ami 137 karakter hosszú (hé, ez egy bináris SMS, a Java UTF-8 kódolást használ bináris üzenetekhez, tehát az 1 SMS korlátja 140 karakter, nem vagyunk menők ?)
a J2ME alkalmazás
ahhoz, hogy a lehető legpraktikusabb legyen, szükségünk lesz egy környezetre, amelyet SMS-üzenetek küldésére és a valós világ leírására használunk, de mivel nem mindenki fér hozzá UDHs-sel rendelkező SMS-átjáróhoz és egy interfészhez, ahol bináris kódot kell beírni, leírjuk, hogyan kell ugyanezt megtenni egy J2ME alkalmazással.
jogi nyilatkozat: ami a WMA specifikációkat illeti, a J2ME alkalmazások nem férhetnek hozzá a speciális fenntartott portokhoz bináris SMS küldéséhez, így a telefonon lévő J2ME alkalmazás nem kap biztonsági kivételt, és az üzenet nem kerül kézbesítésre.
a MIDP2.0-nak két módja van, amelyek lehetővé teszik az üzenetek küldését: az egyikhez karakterlánc szükséges, a másikhoz bájt tömb szükséges. Igen, az első a szöveges tartalom beállítására szolgál, a második a bináris tartalom beállítására szolgál.
szöveg módszer: setPayloadText(String textualSMS);
bináris módszer: setPayloadData(byte binarySMS);
annak érdekében, hogy képes legyen intall a J2ME alkalmazás “Over the Air”, lefordítani a kedvenc J2ME környezetben (szeretem NetBeans a Mobility Pack), másolja a .JAD és .JAR fájlokat a webszerver és testre az URL-t a WAP Push üzenet.
írjunk most egy egyszerű J2ME osztályt, amely elküldi az üzenetet:
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.*;
nyilvános osztály WapPush kiterjeszti MIDlet {
/ / kapcsolat üzenetet küldeni
privát MessageConnection conn;
nyilvános void startApp() {
// tegye ide a mobil számát
karakterlánc myMobileNumber=”+39335…”;
próbálja {
/ / hozzon létre egy bináris üzenetet
/ / a Célportot a decimális jelöléssel fejezzük ki
ezt.conn = (MessageConnection) csatlakozó.nyissa meg (“sms: / /” + myMobileNumber+”:2948″);
// adja meg, hogy bináris üzenetet fogunk küldeni
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();
}
/** ez a módszer affinitystudios
* olvassa tovább http://discussion.forum.nokia.com/forum/member.php?u=56142
* Ez átalakítja karakterláncok adatok tömb karakterek
*/
privát statikus byte convertHexToBinary (String hexData) dob kivétel {
rendszer.kifelé.println (“Hossz:” + (hexadata.Hossz()/2));
ha (hexadata.Hossz () % 2 != 0 ) {
dobjon új kivételt (“páros számú hexadecimális számnak kell lennie” );
}
bájt binaryData = új bájt;
for (int i = 0; i < binaryData.hossz; ++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;
}
nyilvános void pauseApp() {}
nyilvános void destroyApp (logikai feltétel nélküli) {}
}
|
Online SMS átjáró használata
mivel a J2ME sok bináris üzenetet blokkol, kipróbálhat egy online átjárót a bináris üzenetek küldéséhez. Sok vállalat nyújt SMS gateway szolgáltatásokat, és a legtöbbjüknek van egy interfésze a nyers bináris SMS üzenetek küldésére (ezek számomra “plusz”), míg néhány más vállalat csak egy felületet ad a testreszabott mezők beállításához és a bináris dolgok elkészítéséhez.
ha online SMS átjárót szeretne használni, ne felejtse el elolvasni a műszaki előírásokat. Ha azt szeretnénk, hogy telepítse magát egy SMS gateway, amely csatlakozik a külső szolgáltatások (fuvarozók/üzemeltetők), azt javaslom Kannel, amely egy ingyenes SMS gateway szoftver, és ez elterjedt az egész világon; Kannel szereti, hogy az UDH és a test kell elválasztani.
- fenntartott portok és egyebek: J2ME “Wireless Messaging API” specifikációk
http://java.sun.com/products/wma/index.jsp - szabvány formátum OTA tartalom: Open Mobile Alliance
http://www. openmobilealliance.org/tech/affiliates/wap/wapindex.html - OTA konfigurációk, csengőhangok és operátorlogók küldése: NOKIA
http://www. forum.nokia.com (seach az “intelligens üzenetküldési specifikációhoz”) - mobiltelefon észlelése: WURFL
http://deviceatlas.com - Sms gateway szoftver: Kannel
www.kannel.org