WRP - WebView और mobile native communication के लिए Protobuf service protocol
(twitter.com/hrmm_flow)Riiid में, कई अन्य startup की तरह जिनका मुख्य फोकस mobile app पर है, हम उन screens को web में develop करके WebView के रूप में embed करते हैं जो हर mobile platform पर common तौर पर दी जाती हैं.
अलग से, WebView development iteration को तेज़ करने के लिए, हम WebView की जगह iframe का इस्तेमाल करके mobile native की नकल करने वाला एक virtual mobile webpage भी बनाते हैं, और उसी का उपयोग web screen development में करते हैं.
Webpage के रूप में बने screens का lifetime native की तुलना में छोटा होता है और उनके पास सीमित API permissions होती हैं, इसलिए WebView को host करने वाले shell (native, parent window) के साथ communication करने वाला code लिखना अनिवार्य हो जाता है.
लेकिन हर shell की तरफ़ से WebView के साथ communication interface में असुविधाजनक सीमाएँ होती हैं—जैसे bidirectional communication का समर्थन न होना, या केवल मनचाहे js code snippets चलाने का तरीका ही उपलब्ध होना. इसके अलावा, हर shell का interface काफ़ी अलग होता है, इसलिए communication code लिखना थकाऊ काम बन जाता है.
हम पहले से web/mobile client और API server के बीच communication के लिए protobuf और grpc technologies का उपयोग करते रहे हैं. protobuf एक schema language है जिसका उपयोग service interface को describe करने के लिए होता है, और grpc वह protocol layer है जो protobuf से परिभाषित abstract requests को वास्तविक HTTP requests में बदल देती है.
चूँकि backend के साथ communication में हम पहले से protobuf का उपयोग कर रहे थे और engineers उससे परिचित थे, इसलिए workflow को एकरूप बनाने के लिए हमने बहुत पहले यह तय किया था कि मौजूदा WebView communication पद्धति की समस्याओं को हल करने में भी protobuf का उपयोग करेंगे.
उसके बाद, कई वर्षों तक कई mobile apps विकसित करते हुए, हम पहले से shell <-> WebView communication में protobuf codegen development approach का उपयोग करते आए हैं. हाल ही में एक नया app बनाते समय हमने इस तकनीक को बेहतर बनाने और open source करने का निर्णय लिया.
wrp इसी पृष्ठभूमि में जन्मा एक protocol layer है, जो grpc जैसी भूमिका निभाता है, लेकिन केवल WebView के लिए है.
wrp typescript & react / kotlin & compose / swift & tca support, streams, bidirectional communication, webpage के दोबारा load होने पर communication context को restore करने की क्षमता आदि प्रदान करता है. साथ ही, ऐसे हालात के लिए भी यह कुछ हद तक तैयार है जहाँ user की native app version update धीमी हो और WebView तथा protocol के बीच mismatch हो जाए.
अभी wrp की मुख्य functionalities ही विकसित हुई हैं, इसलिए यह अभी पूरी तरह स्थिर नहीं है. लेकिन अगर इस तकनीक में आपकी रुचि है, तो अच्छा होगा अगर आप हमारे Discord server में आएँ और साथ मिलकर इस पर चर्चा करें.
Pbkit Discord server: https://discord.gg/PHmV3nhvQq
Web - TypeScript & React
- लाइब्रेरी: https://github.com/pbkit/wrp-ts
- उदाहरण: https://github.com/pbkit/pbkit.dev/blob/main/islands/WrpIframeHost.tsx
iOS - Swift & TCA
- लाइब्रेरी: https://github.com/pbkit/wrp-swift
- उदाहरण: https://github.com/pbkit/wrp-swift/blob/main/Example/Wrp/WrpExampleServiceProvider.swift
Android - Kotlin & Compose
- लाइब्रेरी: https://github.com/pbkit/wrp-kt
- उदाहरण: https://github.com/pbkit/wrp-kt/blob/main/example/src/main/kotlin/dev/pbkit/wrp/example/MainActivity.kt
(यह Twitter पर लिखी गई सामग्री को थोड़ा संपादित करके यहाँ दोबारा पोस्ट किया गया है)
https://twitter.com/disjukr/status/1537034296959315968
1 टिप्पणियां