Vipengele Vitatu vya Msingi, Lengo Moja
Kwa ndani, Timmy imeundwa kwa njia rahisi na ya vitendo: Flutter kwa ajili ya programu, WebRTC kwa sauti na video ya wakati halisi, na Firebase kwa uratibu. Sikutaka kujenga mfumo mkubwa unaopitisha kila kitu kwenye wingu. Kila sehemu inapaswa kupata taarifa chache kadiri iwezekanavyo huku ikiendelea kufanya kazi kwa uhakika pamoja na sehemu nyingine.
WebRTC: Muunganisho wa Moja kwa Moja, Umesimbwa kwa Chaguomsingi
WebRTC (Web Real-Time Communication) husafirisha sauti na video kati ya kifaa cha mtoto na kifaa cha mzazi. Katika hali nzuri zaidi, data hutiririka moja kwa moja kati ya vifaa viwili, yaani moja kwa moja kutoka kifaa kimoja hadi kingine, bila seva ya kupitishia sauti na video katikati.
Kila muunganisho wa WebRTC hutumia DTLS-SRTP kwa chaguomsingi. Mtu akinasa pakiti za mtandao, hawezi kupata sauti inayoweza kusikilizwa wala video inayoweza kuonekana. Usimbaji huu ni sehemu ya itifaki na hauwezi tu kuzimwa katika WebRTC.
Hilo ndilo lilikuwa jambo muhimu kwangu: sauti na video za chumba cha mtoto hazipaswi kuwa kwenye seva yangu. Zinabaki kati ya vifaa vyako.
Uashiriaji kupitia Firebase Firestore
Kabla WebRTC haijaanza, vifaa vinahitaji kutambuana na kujadiliana kuhusu jinsi vitakavyounganishwa. Sehemu hiyo huitwa uashiriaji. Timmy hutumia Firebase Firestore, hifadhidata ya wingu ya Google, kwa kazi hiyo.
Ni data za kiufundi za muunganisho pekee zinazobadilishwa:
- Mapendekezo na majibu ya SDP: Hueleza uwezo wa vifaa, kama vile kodeki na viwango vya mwonekano vinavyotumika.
- Njia zinazopendekezwa za ICE: Njia zinazowezekana za mtandao ambazo vifaa vinaweza kutumia kufikiana.
Sauti na video haziwekwi kwenye Firebase. Firestore husafirisha tu data za kiufundi za muunganisho. Timmy pia husimba kwa njia fiche taarifa hizi za uashiriaji, hivyo Firestore haiwi mahali ambapo data za SDP na ICE zinaweza kuonekana kama maandishi yasiyosimbwa.
Seva za TURN: Wakati Njia ya Moja kwa Moja Haifanyi Kazi
Baadhi ya mitandao huzuia miunganisho ya moja kwa moja, kwa mfano kwa kutumia ngome kali za mtandao (firewall), na baadhi ya watoa huduma za simu pia hufanya hivyo. Hapo WebRTC huhitaji seva ya kati ya TURN (Traversal Using Relays around NAT).
Timmy hujaribu kwanza seva yake ya TURN na hutumia Cloudflare kama mbadala wakati seva hiyo ya kati haipatikani au imelemewa. Seva hiyo hupitisha pakiti zilizosimbwa kwa njia fiche. Haipati funguo za sauti au video; usimbaji fiche wa WebRTC unabaki salama.
Taarifa za uthibitishaji za TURN hutolewa na Firebase Cloud Function na huwa halali kwa saa 24 pekee. Kwangu, kuweka taarifa za kudumu za uthibitishaji katika programu ya kufuatilia mtoto kungekuwa hatari sana.
Nearby Connections: Vifaa vinatambuana kiotomatiki
Ili kuepuka hatua ngumu za kusanidi kati ya kifaa cha mtoto na cha mzazi, Timmy hutumia Nearby Connections. Google hutoa teknolojia hii ya kugundua vifaa kupitia Bluetooth na Wi-Fi.
Kuunganisha vifaa kiotomatiki kwenye Timmy hufanya kazi bila kuingiza msimbo mwenyewe: vifaa hugunduana na kupata sehemu ileile ya kukutana kwa ajili ya kubadilishana funguo. Hilo lisipofaulu, kuna msimbo wa vibambo 4 unaoweza kuandika. Msimbo wa kuunganisha vifaa hautoki kamwe kwenye kifaa; Firestore huona alama ya kriptografia (hashi ya SHA-256) pekee kama kitambulisho cha hati.
Uthibitishaji Bila Kutambulisha Mtumiaji
Timmy hutumia Firebase Anonymous Authentication. Kila kifaa kinapofunguliwa kwa mara ya kwanza, hupokea kitambulisho cha muda kisichohusishwa na utambulisho wa mtumiaji. Hakuna akaunti, anwani ya barua pepe wala nenosiri. Kitambulisho hiki kinatumika tu kutekeleza sheria za Firestore: ni vifaa vilivyothibitishwa pekee vinavyoweza kusoma au kuandika data za kipindi.
Muundo: Nani Hutuma, Nani Hupokea
Timmy ina hali mbili:
- Hali ya Mtoto (mtumaji): Kifaa hunasa sauti kupitia maikrofoni na kuituma kwenye kifaa cha mzazi kupitia WebRTC. Kamera inaweza pia kuwashwa; ikiwashwa, video nayo hutumwa moja kwa moja.
- Hali ya Mzazi (mpokeaji): Kifaa hupokea sauti na video, huonyesha video kutoka kwenye kamera, na kina kipengele cha kubonyeza ili kuzungumza (push-to-talk) kwa ajili ya kutuma ujumbe mfupi wa sauti kwenye kifaa cha mtoto.
Vidhibiti kama push-to-talk na kuwasha/kuzima kamera hutumia DataChannel, njia nyingine ya WebRTC inayotuma jumbe fupi zilizosimbwa kwa njia fiche moja kwa moja kati ya vifaa.
Kwa Nini Flutter?
Flutter ni mfumo wa Google wa kutengeneza programu kwa majukwaa mengi. Kwa Timmy, hiyo inamaanisha ninaweza kuandika sehemu kubwa ya mantiki mara moja na kuitumia kwenye Android na iOS. Timmy inapatikana kwenye Android, na toleo la iOS linakaribia kutolewa. Kupunguza kurudiwa kwa msimbo kunamaanisha kupunguza sehemu ambazo hitilafu zinaweza kujipenyeza.
Muhtasari
Kanuni ya kiufundi ni rahisi: Timmy inapaswa kushughulikia tu data inayohitaji kweli. WebRTC hulinda sauti na video, Firebase huratibu usanidi wa muunganisho, TURN huona pakiti zilizosimbwa kwa njia fiche pekee, na Nearby Connections hurahisisha kuunganisha vifaa.
Teknolojia nzuri huwa karibu kutoonekana katika maisha ya kila siku. Hufanya kazi bila kugeuza chumba cha mtoto kuwa mradi wa wingu.