ბლოგი

როგორ მუშაობს Baby Monitor Timmy ტექნიკურად

WebRTC, Firebase და ბოლომდე დაშიფვრა — მარტივად, ტექნიკური ხმაურის გარეშე.

სამი ძირითადი ნაწილი, ერთი მიზანი

შიგნიდან რომ შევხედოთ, Timmy საკმაოდ პრაქტიკულად არის აწყობილი: Flutter აპისთვის, WebRTC რეალურ დროში აუდიოსა და ვიდეოსთვის, და Firebase კოორდინაციისთვის. არ მინდოდა დიდი პლატფორმის შექმნა, რომელიც ყველაფერს ღრუბლის გავლით გაატარებდა. თითოეულ ნაწილს რაც შეიძლება ცოტა უნდა იცოდეს და მაინც საიმედოდ მუშაობდეს დანარჩენებთან ერთად.

WebRTC: პირდაპირი კავშირი, ნაგულისხმევად დაშიფრული

WebRTC (Web Real-Time Communication) აუდიოსა და ვიდეოს ბავშვისა და მშობლის მოწყობილობებს შორის გადასცემს. საუკეთესო შემთხვევაში მონაცემები მიედინება პირდაპირ ორ მოწყობილობას შორის, peer-to-peer კავშირით, მედია სერვერის გარეშე.

WebRTC-ის ყველა კავშირი ნაგულისხმევად იყენებს DTLS-SRTP-ს. თუ ვინმე ქსელის პაკეტებს ჩაიგდებს ხელში, წასაკითხად ვარგის აუდიოსა თუ ვიდეოს ვერ მიიღებს. ეს დაშიფვრა პროტოკოლის ნაწილია და WebRTC-ში უბრალოდ ვერ გამოირთვება.

ეს ჩემთვის მთავარი იყო: საბავშვო ოთახის მედია ჩემს სერვერზე არ უნდა ხვდებოდეს. ის თქვენს მოწყობილობებს შორის რჩება.

სიგნალიზაცია Firebase Firestore-ის საშუალებით

სანამ WebRTC დაიწყება, მოწყობილობებმა ერთმანეთი უნდა იპოვონ და შეათანხმონ, როგორ დაუკავშირდებიან. ამ ნაწილს ეწოდება სიგნალიზაცია. ამისთვის Timmy იყენებს Google-ის ღრუბლოვან მონაცემთა ბაზას, Firebase Firestore-ს.

იცვლება მხოლოდ კავშირის ტექნიკური მონაცემები:

აუდიო და ვიდეო Firebase-ში არ ხვდება. Firestore მხოლოდ კავშირის ტექნიკურ მონაცემებს გადასცემს. Timmy სიგნალიზაციის ამ ფენასაც შიფრავს, ამიტომ Firestore SDP-ისა და ICE-ის ღია ტექსტის შესახვედრ ადგილად არ იქცევა.

TURN სერვერები: როცა პირდაპირი გზა არ მუშაობს

ზოგი ქსელი პირდაპირ კავშირებს ბლოკავს, მაგალითად მკაცრი ფაირვოლები ან მობილური ოპერატორების გარკვეული ქსელები. ასეთ დროს WebRTC-ს სჭირდება TURN რელე (Traversal Using Relays around NAT).

Timmy ჯერ ლოკალურ TURN სერვერს ცდის, ხოლო თუ ლოკალური რელე მიუწვდომელია ან გადატვირთულია, სათადარიგოდ Cloudflare-ს იყენებს. რელე დაშიფრულ პაკეტებს მხოლოდ გადააგზავნის. მას აუდიოსა და ვიდეოს გასაღებებზე წვდომა არ აქვს; WebRTC-ის დაშიფვრა უცვლელად რჩება.

TURN-ის ავტორიზაციის მონაცემები Firebase Cloud Function-იდან მოდის და მხოლოდ 24 საათი მოქმედებს. ბავშვის მონიტორის აპში მუდმივი ავტორიზაციის მონაცემები, ჩემი აზრით, ზედმეტად სარისკო იქნებოდა.

Nearby Connections: მოწყობილობები ერთმანეთს ავტომატურად პოულობენ

ბავშვისა და მშობლის მოწყობილობებს შორის უხერხული დაყენების ნაბიჯების თავიდან ასაცილებლად, Timmy იყენებს Nearby Connections. Google ამ აღმოჩენის ფენას Bluetooth-ისა და WiFi-ის საშუალებით უზრუნველყოფს.

Timmy-ში ავტომატური დაწყვილება მუშაობს კოდის ხელით შეყვანის გარეშე: მოწყობილობები ერთმანეთს პოულობენ და გასაღებების გაცვლისთვის ერთსა და იმავე შეხვედრის წერტილს პოულობენ. თუ ეს ვერ მოხერხდა, შეგიძლიათ 4-სიმბოლოიანი კოდი შეიყვანოთ. დაწყვილების კოდი მოწყობილობას არასოდეს ტოვებს; Firestore დოკუმენტის იდენტიფიკატორად მხოლოდ კრიპტოგრაფიულ ჰეშს (SHA-256) ხედავს.

ანონიმური ავთენტიკაცია

Timmy იყენებს Firebase Anonymous Authentication-ს. პირველად გაშვებისას თითოეული მოწყობილობა დროებით, ანონიმურ ID-ს იღებს. არ არის ანგარიში, ელფოსტის მისამართი და პაროლი. ID მხოლოდ Firestore-ის წესების დასაცავად არსებობს: სესიის მონაცემების წაკითხვა ან ჩაწერა მხოლოდ ავთენტიკირებულ მოწყობილობებს შეუძლიათ.

არქიტექტურა: ვინ აგზავნის, ვინ იღებს

Timmy-ს ორი რეჟიმი აქვს:

მართვის ფუნქციები, მაგალითად push-to-talk და კამერის ჩართვა/გამორთვა, იყენებენ DataChannel-ს, WebRTC-ის კიდევ ერთ არხს, რომელიც პატარა დაშიფრულ შეტყობინებებს მოწყობილობებს შორის პირდაპირ აგზავნის.

რატომ Flutter?

Flutter არის Google-ის ფრეიმვორკი მრავალ პლატფორმაზე აპების შესაქმნელად. Timmy-სთვის ეს ნიშნავს, რომ ლოგიკის დიდი ნაწილი ერთხელ შემიძლია დავწერო და Android-სა და iOS-ზე გამოვიყენო. Timmy ხელმისაწვდომია Android-ზე, ხოლო iOS ვერსიის გამოშვებაც ახლოსაა. ნაკლები დუბლირებული კოდი ნიშნავს ნაკლებ ადგილს, სადაც შეცდომა შეიძლება გაჩნდეს.

შეჯამება

ტექნიკური წესი მარტივია: Timmy-მ მხოლოდ ის მონაცემები უნდა გამოიყენოს, რაც ნამდვილად სჭირდება. WebRTC მედიას იცავს, Firebase კავშირის მომზადებას კოორდინირებს, TURN მხოლოდ დაშიფრულ პაკეტებს ხედავს, Nearby Connections კი დაწყვილებას ამარტივებს.

კარგი ტექნოლოგია ყოველდღიურ ცხოვრებაში ცოტათი ქრება. ის მუშაობს ისე, რომ საბავშვო ოთახი ღრუბლოვან პროექტად არ იქცეს.


სხვა სტატიები