Binääritekstiviestit: rikkaan sisällön lähettäminen laitteisiin tekstiviestillä

tässä artikkelissa selitetään korkealta tasolta alemmalle tasolle, miten kirjoittaa yksinkertainen tekstiviestillä varustettu mobiilisovellus, jonka avulla voit lähettää ”Over the Air installation messages”. Kun olet lukenut tämän artikkelin, voit luoda pienen J2ME-sovelman, joka teoriassa lähettää itsensä toiseen puhelimeen tekstiviestillä toimitustapana. Itse asiassa, koska rajoitukset Wireless Messaging API J2ME (JSR 120/205) portti WAP Push viestit ovat ”varattu” turvallisuussyistä. Kyky lähettää sisältöä laajasti tuetun TEKSTIVIESTIKANAVAN kautta voi olla erittäin hyödyllinen sisällöntuottajille.

tekstiviestit ovat pieni määrä pakattuja tavuja, jotka lähetetään operaattoriverkkojen kautta. Monet teistä ovat jo kokeneet ”tekstiviestien” lähettämisen laitteista ja monet kutsuvat tekstiviestien lähettämistä ”kutomiseksi”.

pieni tekninen johdatus tekstiviesti

tämän artikkelin soveltamisala on olla käytännöllinen, joten emme käy läpi kaikkia verkkojen teknisiä ja tylsiä yksityiskohtia,mutta kolme käsitettä ovat aika tärkeitä ymmärtää tekstiviesti.

  • tekstiviesti käyttää käsitettä” portti ” aivan kuten tavallisissa internetpistorasioissa;
  • tekstiviesteissä on 160 merkin raja;
  • keho ei ole ainoa asia, jolla tekstiviestissä voi leikkiä, on myös käyttäjätietojen otsake.

Portit

kun osut selaimessasi olevaan URL-osoitteeseen, kuten http://dev.mobi, soitat avoimesti WWW-palvelimen porttiin 80, sovitun tavan mukaan. Yhteys alustetaan porttiin 80 ja siirtyy sitten korkeampaan porttiin, jotta muut käyttäjät voivat käyttää samaa WWW-palvelimen porttia. Portti 80, kuten IANA toteaa, viittaa HTTP-protokollaan, tämä tarkoittaa, että palvelin, joka pystyy ymmärtämään HTTP-protokollapyynnön, herää ja on valmis vastaamaan ja käsittelemään HTTP-pyyntöjä. Sama tapahtuu tekstiviestien kanssa. Voit lähettää tekstiviestin tiettyyn puhelimen porttiin ja havaitset tietyn palvelun kyseisellä laitteella. Nyt, aivan kuten kaikissa tietokoneissa ei ole vakiopalveluja (kuten WWW-palvelin), ei myöskään kaikissa mobiililaitteissa ole palveluita, jotka kuuntelevat portteja. Tämä on hyvin ”valmistajaan liittyvä” tavaraa, joten sinun täytyy tarkistaa puhelimen mitä on käytössä hyväksyä.

keho ja koodaus

tämä voisi olla vaikea aihe käsitellä, mutta me vain kuvata hyvin perustiedot, jotka voivat olla hyödyllisiä. SMS oletuskoodaus käyttää 7 bittiä käsitellä merkin. Tämä tarkoittaa sitä, että voit kirjoittaa tekstiviestillä vain ne merkit, jotka ovat läsnä hyvin perus char taulukossa, kyllä ne kuuluisat 127 merkkiä. Jos haluat mennä monimutkaisempia juttuja ja lähettää enemmän ”mielenkiintoisia” merkkejä, sitten ryhmä 8 bittiä tarvitaan ja taulukko käytettävissä merkkiä saa isompi. Käytettävissä oleva tila on 1120 bittiä tekstiviestiä kohden, ei enempää eikä vähempää. Voit saada 160 merkkiä käyttämällä 7 bittiä tai 140 merkkiä käyttämällä 8 bittiä

huomaa: merkki ”É” sisältyy ”perustaulukkoon”, kun taas merkki ”È” on ”isommissa taulukoissa”. Jos kirjoitat viestin toisella merkillä, sinulla on vähemmän tilaa viestissä. Kiinnitä siis huomiota siihen, mitä merkkejä käytät lähettäessäsi tekstiviestejä 😉

User Data Header

User Data Header (tunnetaan myös nimellä UDH) on se, mitä ”korkean tason kehittäjä” voi asettaa tehdäkseen jotain muutakin kuin yksinkertaisen ”tekstiviestin”. UDH on erittäin hyödyllinen, koska voit lähettää ”näkymättömiä tekstiviestejä” mobiilisovellukseen (missä ”mobiilisovellukset” tarkoitan esimerkiksi mobiililaitteilla toimivia) tai voit kertoa laitteelle, että viesti sisältää erityistä tietoa. Se on hyvin samanlainen kuin XML-tiedosto: sinun täytyy kertoa jäsennin, mitä olet lähettämässä, ja sisällön jälkeen Prolog joka käsitellään jäsennin itse.

UDH: ta käytetään lähinnä määrittelemään, mihin portteihin asiakkaamme (puhelin) lähettää tekstiviestin. Se on tehty joukko heksaluku, jotka kuvaavat:

<kuinka pitkä UDH on> <satamien numerot> <sataman numeron pituus> <määräsataman numero> <lähdesataman numero>.

käytännön esimerkkinä sanotaan, että haluan luoda UDH: n WAP-työntöjen lähettämiseksi, jossa WAP-työntöjen vakioportti on 2948, UDH on:

1
06 05 04 0B 84 23 F0

jossa:

  • 06 tarkoittaa ”hei lukea seuraavat 6 tavua”
  • 05 on numeroiden muoto, tässä tapauksessa heksadesimaaliluku
  • 04 kertoo UDH: lle, että jokainen portti on esitetty käyttäen 4 merkkiä
  • 0b84 on kohdeportti, 2948 (desimaaliesitys) tai 0B84 (heksadesimaaliesitys)
  • 23f0 on lähdeportti, 9200 (desimaaliesitys) tai 23f0 (heksadesimaaliesitys).

huomaa: käytä yksinkertaista laskinta muuttaaksesi desimaaliluvut heksaksi; valitse ”Dec”, laita 2948 laskimeen ja paina sitten nappia ”Hex”. Mikä tahansa tieteellinen laskin voi tehdä tämän ja monissa käyttöjärjestelmissä on pieni ”calc” – sovellus jossain, joka voi tehdä tämän.

Binääritekstiviesti

”binääritekstiviesti” on XML-formatoitu tekstitekstiviesti, joka on muunnettu WBXML: n avulla. WBXML on ”tag-muuntaja”, mikä tarkoittaa, että jokaiseen XML-tagiin liittyy binääritavu. Esimerkiksi merkintä <SI> muunnetaan binäärimerkiksi &#x0005;

miksi Wbxml?

helppo vastaus: wbxml-muunnoksen tulos on luotujen tavujen määrässä pienempi kuin itse sanallinen XML-tiedosto.

Huomautus: monet tagit muunnetaan tavuiksi, mutta joskus myös sisältö (kuten URL-osoitteet), esim.URL http://www.dev.mobi voidaan kirjoittaa WBXML: ssä seuraavasti 0Ddev.mobi , jossa ”0D”tarkoittaa http://www.

” 0C ” on yleisempi ja tarkoittaa http://, joten URL-osoitteen voi kirjoittaa kahdella tavalla:

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

tai

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

ensimmäinen käyttää 9 merkkiä (0D on yksi tavu), toinen 13 merkkiä! Rakastan WBXML 🙂

termit

selvyyden vuoksi, ”WAP pushilla” emme tarkoita tapaa lähettää tekstiviestejä WAP: lla. Tarkoitamme sitä, mitä teknisesti kutsutaan SI: ksi (Palvelumerkinnäksi). Palvelumerkintä on laitteen erilliseen porttiin lähetetty binääritekstiviesti, joka ilmoittaa laitteelle, että URL odottaa vierailua. URL-osoite voi olla verkkoäänen osoite Web-palvelimessa, J2ME-sovelluksen asentavan Jad-Tiedoston osoite tai JPG tai yksinkertaisesti WAP-sivu; web-palvelimen ”webmasterin” tehtävä on laittaa sisältö web-sivustolle, ja laitteen on ymmärrettävä, miten sisältöä käsitellään. Lisätietoja tästä osa palapeli, Katso our Content adaptation sarjan artikkeleita.

Huomautus: Kun sanon ”web-palvelin” tarkoitan sekä web-ja WAP-palvelin, koska useimmat web-palvelimet voidaan konfiguroida toimittamaan WAP-sisältöä. By ” OTA Configuration SMS ”tarkoitan binary SMS, joka sisältää APN tiedot (mutta voi sisältää enemmän) tunnetaan myös nimellä”Internet Access Configuration”.

Huom: on olemassa erityisiä ”Palvelumerkintäsanomia”, joita yleensä kutsutaan nimellä SL (Service Load) ja jotka ovat samanlaisia kuin”SI”. Si kysyy lupaa käyttäjälle ennen sisällön hakemista verkkoyhteyden kautta, SL lataa sisällön automaattisesti kysymättä lupaa käyttäjältä. ”SL” ovat hyvin samanlaisia kuin MMS-viestit: sisältö on verkkopalvelimella ja tekstiviesti käskee puhelinta lataamaan viestin.

so Let ’ s Start

First of all, we need to read some papers (valitettavasti) to read some specifications on how to write XML content to be sent over SMS. Hyvä lähtökohta voisi olla Nokian ”Smart Messaging Specification 3.0.0”, joka voidaan ladata www.forum.nokia.com ja myös lisää teknisiä dokumentteja Open Mobile Alliance (OMA) alkaen www.openmobilealliance.org/tech/affiliates/wap/wapindex.html

joten askeleemme ovat:

  • päätä, mitä haluamme lähettää
  • Etsi dokumentit tästä aiheesta
  • Etsi lähetettävän viestin XML-rakenne
  • muokkaa XML: ää
  • Muunna XML wbxml: ksi
  • valmista UDH
  • lähetä udh ja keho

koska haluamme lähettää J2ME-sovelluksen uuteen puhelimeen, meidän on lähetettävä ”palvelumerkintä” – viesti, joka tunnetaan myös nimellä ”wap push”. Tämä ” SI ” voidaan työntää tekstiviesti, joka luetaan linkki ladata jotain. Mikä tahansa Sisältötyyppi (kuva/jpeg, sovellus/java-arkisto, …) on kelvollinen, jos puhelin pystyy avaamaan sen.

Kuka siis tietää, mitä sisältötyyppejä laite voi avata ? DeviceAtlas voi auttaa meitä täällä! (Katso viitteet)

Etsi dokumentit tästä aiheesta

Ok, avataan OMA-linkki ja mennään” funktionaaliseen alueeseen ”merkittynä”push”. Let ’ s get ”Wap Service Indication Specification”. Jotta ymmärtää, miten wbxml toimii, ehdotan lukea kohdan 8.3.2 ”attribuutti Start Tokens”.

Etsi viestin XML-rakenne

niille, jotka muistuttavat enemmän DTD: tä, katso kohta 7.2. Kaikki muut voivat ohittaa kaikki doc: n ja siirtyä kohdassa 9 olevaan lukuesimerkkiin. XML on melko itsestään selvää, joten aion tehdä joitakin räätälöinnin suoraan.

1
2
3
4
5
6
7

<?xml-versio= ”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 merkkijono päättyy
11 si-id-attribuutti
03 merkkijono alkaa
** 36353332 6532
00 merkkijono päättyy
07 toiminta-attribuutti (signal-medium)
01 attribuuttien päät, nyt sisältö
03 merkkijono alkaa
* 446576446F744D6F62692069732046756E2021 DevDotMobi on hauska !
00 merkkijono päättyy
01 </käyttöaiheet>
01 </SI>

* nämä ovat merkkijonoja, joita käytetään sisällön siirtämiseen SI: lle, jokainen merkkijonon merkki muunnetaan sen heksadesimaaliesitykseksi.
** ”6532” on pidettävä merkkijonona eikä lukuna, joten älä käytä laskinta muuntaaksesi tätä lukua

kehomme on, laittaen kaikki numerot yhteen:

1
02056A0045C60C037777772E6465762E6D6F62692F69735F66756E2E68746D6C0<br />011033635333200070103446576446F744D6F62692069732046756E2021000101

(joka on 130 merkkiä)

valmista UDH

udh: n valmistelu on melko helppoa. Aloita vain ”06 05 04” ja lisää sitten portin numerot. WAP Push viestit käyttää ”kohdeportti” 2948 kun lähdeportti on 9200. Muuntaa desimaaliporttinumerot heksadesimaalimuotoihin, joten 2948: sta tulee 0B84 ja 9200: sta 23f0. Maagisesti UDH on: 06 05 04 0B 84 23 F0

Lähetä tekstiviesti ja UDH

nyt, mitä tälle pitää tehdä? Melko yksinkertainen, vain laittaa kaiken yhteen ja tekstiviesti on valmis lähetettäväksi.

<UDH> + < elin>

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

The complete message is then:

1
<span><strong>0605040B8423F0</strong><br /> 02056a0045c60c037777772e6465762e6d6f62692f69735f66756e2e68746d6c0<BR /> 011033635333200070103446576446f744d6f62692069732046756e2021000101</span>

joka on 137 merkkiä pitkä (hei, se on binary SMS, Java käyttää UTF-8 koodaus binary viestejä, joten raja 1 SMS on 140 merkkiä, emmekö ole cool ?)

J2ME-sovellus

jotta se olisi mahdollisimman käytännöllinen, tarvitsemme ympäristön, jota käytetään tekstiviestien lähettämiseen ja reaalimaailman kuvaamiseen, mutta koska kaikilla ei ole pääsyä UDHS: llä varustettuun tekstiviesti-yhdyskäytävään ja käyttöliittymään, johon voi syöttää binäärikoodia, kuvaamme, miten sama tehdään J2ME-sovelluksella.

Vastuuvapauslauseke: WMA-spesifikaatioiden osalta J2ME-sovellukset eivät voi käyttää erityisiä varattuja portteja binääritekstiviestien lähettämiseen, joten epäonnisesti puhelimen J2ME-sovellus saa tietoturvapoikkeuksen eikä viestiä toimiteta.

MIDP2.0: ssa on kaksi menetelmää, jotka mahdollistavat viestien lähettämisen: toinen vaatii merkkijonon, toinen tavujen joukon. Kyllä, ensimmäistä käytetään tekstin sisällön asettamiseen, toista binäärisisällön asettamiseen.

Tekstimenetelmä: setPayloadText(String textualSMS);
Binäärimenetelmä: setPayloadData(byte binarySMS);

jotta J2ME-sovelluksen voi yhdistää ”Over the Air”, käännä se suosikkiympäristössäsi J2ME (pidän Netbeansista Mobility Pack), kopioi .JAD ja .JAR tiedostoja palvelimelle ja muokata URL WAP Push viesti.

kirjoitetaan nyt yksinkertainen J2ME-luokka, joka lähettää viestin:

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 {
// Connection to send a message
private MessageConnection conn;
public void startApp() {
// laita tähän matkapuhelinnumerosi
String myMobileNumber= ” +39335…”;
try {
// Create a binary message
// Destination port ilmaistaan käyttäen desimaalimerkintää
tämä.conn=(MessageConnection) liitin.avaa (”sms:/ /” +myMobileNumber+”:2948″);
// määritä, että lähetämme binäärisanoman
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();
}
/** tämä menetelmä tulee affiniittudiosta
* read on http://discussion.forum.nokia.com/forum/member.php?u=56142
* se muuntaa merkkijonoja datajoukko merkkejä
*/
yksityinen staattinen tavu convertHexToBinary (String hexData) heittää poikkeuksen {
systeemi.ulos.println (”Pituus:” +(hexData.pituus()/2));
if (hexData.pituus () % 2 != 0 ) {
heittää Uusi poikkeus (”on oltava parillinen määrä heksalukuja” );
}
tavu binaryData = Uusi tavu;
for (int I = 0; i < binaryData.pituus; ++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;
}
Julkinen void pauseApp() {}
public void destroyApp(boolean unconditional) {}
}

käyttämällä online SMS gateway

koska J2ME estää monia binääriviestejä, voit kokeilla online gateway lähettää binääriviestejä. Monet yritykset tarjoavat SMS gateway palvelut, ja useimmat niistä on käyttöliittymä lähettää raaka binary tekstiviestejä (nämä ovat ”plus” minulle), kun taas jotkut muut yritykset vain antaa sinulle käyttöliittymä asettaa räätälöityjä kenttiä ja tehdä binary tavaraa sinulle.

jos haluat käyttää online SMS gateway, vain muistaa lukea niiden tekniset tiedot. Jos haluat asentaa itsellesi SMS gateway, joka muodostaa yhteyden ulkoisiin palveluihin (harjoittajat/operaattorit), ehdotan Kannel, joka on ilmainen SMS gateway ohjelmisto ja se on levinnyt ympäri maailmaa; Kannel haluaa olla UDH ja elin on erotettu.

  1. varatut portit ja lisää: J2ME ”Wireless Messaging API” – TEKNISET TIEDOT
    http://java.sun.com/products/wma/index.jsp
  2. OTA-sisällön vakiomuoto: Open Mobile Alliance
    http://www.openmobilealliance.org/tech/affiliates/wap/wapindex.html
  3. miten lähettää OTA configs, soittoäänet ja operaattorin logot: NOKIA
    http://www.forum.nokia.com (seach ”Smart Messaging Specification”)
  4. miten tunnistaa matkapuhelin: WURFL
    http://deviceatlas.com
  5. Sms gateway-ohjelmisto: Kannel
    www.kannel.org

Vastaa

Sähköpostiosoitettasi ei julkaista.