WRP - WebView ve mobil native iletişimi için Protobuf servis protokolü
(twitter.com/hrmm_flow)Riiid’de, mobil uygulamaları ana odağına alan birçok başka startup gibi, her mobil platformda ortak sunulan ekranları web ile geliştirip bunları WebView biçiminde uygulamaya gömüyoruz.
Ayrıca hızlı WebView geliştirme iterasyonu için, WebView yerine iframe kullanarak mobil native’i taklit eden bir yöntemle sanal bir mobil web sayfası oluşturup bunu web ekranı geliştirmede de kullanıyoruz.
Web sayfası olarak oluşturulan ekranlar native’e göre daha kısa bir yaşam döngüsüne sahiptir ve sınırlı API izinleri taşır; bu nedenle kaçınılmaz olarak WebView’i barındıran kabukla (native, parent window) iletişim kuran kodlar yazmak gerekir.
Ancak her kabuk tarafında WebView ile iletişim kuran arayüzler kullanışsız kısıtlamalara sahip olabiliyor (örneğin çift yönlü iletişimin olmaması ya da yalnızca rastgele JS kod parçacıkları çalıştırmayı desteklemesi gibi). Buna ek olarak, her kabuğun arayüzü büyük ölçüde farklı olduğu için iletişim kodunu yazmak yorucu bir sorun haline geliyor.
Biz, web/mobil istemcilerin API sunucusuyla iletişim kurarken zaten protobuf ve grpc teknolojilerini kullanıyorduk. protobuf, servis arayüzlerini tanımlamak için kullanılan bir şema dili; grpc ise protobuf ile tanımlanan soyut istekleri gerçek HTTP isteklerine dönüştüren protokol katmanıdır.
Zaten backend ile iletişimde protobuf kullandığımız ve mühendisler buna aşina olduğu için, iş akışını birleştirmek amacıyla mevcut WebView iletişim yöntemlerinin sorunlarını çözmede protobuf kullanmaya uzun zaman önce karar verdik.
Sonraki yıllarda birden fazla mobil uygulama geliştirirken kabuk <-> WebView iletişiminde zaten protobuf codegen geliştirme yaklaşımını kullanıyorduk. Yakın zamanda yeni bir uygulama geliştirirken bu teknolojiyi iyileştirip açık kaynak haline getirmeye karar verdik.
wrp, işte bu arka planda ortaya çıkan; grpcye benzer bir rol üstlenen ama WebView’a özel bir protokol katmanıdır.
wrp; typescript & react / kotlin & compose / swift & tca desteği, stream, çift yönlü iletişim, web sayfası yeniden yüklendiğinde iletişim bağlamını geri yükleme gibi özellikler sunuyor. Ayrıca, kullanıcının native uygulama sürümünü yavaş güncellemesi nedeniyle WebView ile protokol uyumsuzluğu oluşan durumlara karşı da belli ölçüde hazırlıklıdır.
wrp’nin ana özellikleri henüz yeni geliştirilmiş olduğu için şu an çok stabil değil; ancak bu teknolojiyle ilgileniyorsanız Discord sunucumuza katılıp birlikte konuşabilirsek seviniriz.
Pbkit Discord sunucusu: https://discord.gg/PHmV3nhvQq
Web - TypeScript & React
- Kütüphane: https://github.com/pbkit/wrp-ts
- Örnek: https://github.com/pbkit/pbkit.dev/blob/main/islands/WrpIframeHost.tsx
iOS - Swift & TCA
- Kütüphane: https://github.com/pbkit/wrp-swift
- Örnek: https://github.com/pbkit/wrp-swift/blob/main/Example/Wrp/WrpExampleServiceProvider.swift
Android - Kotlin & Compose
- Kütüphane: https://github.com/pbkit/wrp-kt
- Örnek: https://github.com/pbkit/wrp-kt/blob/main/example/src/main/kotlin/dev/pbkit/wrp/example/MainActivity.kt
(Twitter’da yazdığım içeriği biraz düzenleyerek buraya aktardım)
https://twitter.com/disjukr/status/1537034296959315968
1 yorum