Bloq

Baby Monitor Timmy Texniki Olaraq Necə İşləyir

WebRTC, Firebase və başdan-başa qoruma — termin bolluğu olmadan izah edilir.

Üç əsas hissə, bir məqsəd

Timmy-nin içində hər şey olduqca praktik şəkildə qurulub: Flutter tətbiq üçün, WebRTC real vaxtda səs və video üçün və Firebase əlaqələndirmə üçün. Hər şeyi bulud üzərindən keçirən nəhəng bir platforma qurmaq istəmirdim. Hər hissə mümkün qədər az məlumat bilməli, amma digərləri ilə etibarlı işləməlidir.

WebRTC: birbaşa bağlantı, standart olaraq şifrələnmiş

WebRTC (Web Real-Time Communication) körpə və valideyn cihazları arasında səs və videonu ötürür. Ən yaxşı halda məlumatlar birbaşa iki cihaz arasında, peer-to-peer şəkildə, arada media serveri olmadan axır.

Hər WebRTC bağlantısında standart olaraq DTLS-SRTP istifadə edilir. Kimsə şəbəkə paketlərini ələ keçirsə, oxuna bilən səs və ya video əldə etmir. Bu şifrələmə protokolun bir hissəsidir və WebRTC-də sadəcə söndürülə bilməz.

Mənim üçün əsas məqam bu idi: uşaq otağındakı media məlumatları mənim serverimə aid deyil. Onlar cihazlarınız arasında qalır.

Firebase Firestore ilə Siqnallaşma

WebRTC başlamazdan əvvəl cihazlar bir-birini tapmalı və necə qoşula biləcəklərini razılaşdırmalıdır. Bu hissə siqnallaşma adlanır. Timmy bunun üçün Google-un bulud verilənlər bazası olan Firebase Firestore-dan istifadə edir.

Yalnız texniki bağlantı məlumatları paylaşılır:

Səs və video Firebase-ə düşmür. Firestore yalnız texniki bağlantı məlumatlarını ötürür. Timmy bu siqnallaşma qatını da şifrələyir, beləliklə Firestore SDP və ICE üçün açıq mətnli görüş nöqtəsinə çevrilmir.

TURN Serverləri: Birbaşa Yol İşləməyəndə

Bəzi şəbəkələr birbaşa bağlantıları bloklayır, məsələn, sərt təhlükəsizlik divarları və ya bəzi mobil operatorlar. Bu zaman WebRTC-yə TURN releysi (Traversal Using Relays around NAT) lazımdır.

Timmy əvvəlcə yerli TURN serverini yoxlayır, yerli rele əlçatmaz və ya yüklənmiş olduqda isə ehtiyat variant kimi Cloudflare-dən istifadə edir. Rele şifrələnmiş paketləri yönləndirir. Səs və ya video üçün açarları əldə etmir; WebRTC şifrələnməsi qüvvədə qalır.

TURN giriş məlumatları Firebase Cloud Function-dan gəlir və cəmi 24 saat etibarlıdır. Körpə monitoru tətbiqində daimi giriş məlumatları məncə həddindən artıq riskli olardı.

Yaxınlıqdakı Bağlantılar: Cihazlar Bir-birini Avtomatik Tapır

Körpə və valideyn cihazları arasında çətin quraşdırma addımlarının qarşısını almaq üçün Timmy Nearby Connections istifadə edir. Google bu aşkarlama qatını Bluetooth və WiFi üzərindən təmin edir.

Timmy-də avtomatik qoşalaşdırma əl ilə kod daxil etmədən işləyir: cihazlar bir-birini tapır və açar mübadiləsi üçün eyni görüş nöqtəsini müəyyən edir. Bu alınmasa, daxil edə biləcəyiniz 4 simvollu kod var. Qoşalaşdırma kodu heç vaxt cihazdan çıxmır; Firestore sənəd identifikatoru kimi yalnız kriptoqrafik heş (SHA-256) görür.

Anonim Doğrulama

Timmy Firebase Anonymous Authentication-dan istifadə edir. İlk açılışda hər cihaz müvəqqəti, anonim ID alır. Hesab, e-poçt ünvanı və parol yoxdur. ID yalnız Firestore qaydalarını tətbiq etmək üçündür: sessiya məlumatlarını yalnız doğrulanmış cihazlar oxuya və yaza bilər.

Arxitektura: Kim Göndərir, Kim Qəbul Edir

Timmy-nin iki rejimi var:

Basıb-danışma və kameranı açıb-söndürmə kimi idarəetmələr DataChannel adlı başqa bir WebRTC kanalı ilə işləyir; bu kanal kiçik şifrələnmiş mesajları birbaşa cihazlar arasında göndərir.

Niyə Flutter?

Flutter Google-un müxtəlif platformalar üçün tətbiq çərçivəsidir. Timmy üçün bu o deməkdir ki, məntiqin böyük hissəsini bir dəfə yazıb həm Android, həm də iOS-da istifadə edə bilirəm. Timmy Android-də əlçatandır, iOS versiyasının buraxılışı isə yaxındır. Təkrarlanan kodun az olması xətaların yarana biləcəyi yerləri də azaldır.

Xülasə

Texniki qayda sadədir: Timmy yalnız həqiqətən ehtiyacı olan məlumatlara toxunmalıdır. WebRTC medianı qoruyur, Firebase bağlantının qurulmasını əlaqələndirir, TURN yalnız şifrələnmiş paketləri görür, Nearby Connections isə qoşalaşdırmanı sadələşdirir.

Yaxşı texnologiya gündəlik həyatda bir qədər görünməz olur. Uşaq otağını bulud layihəsinə çevirmədən işləyir.


Daha Çox Məqalə