Daha entegre bir deneyim için yüklü PWA'ların belirli bir protokol kullanan bağlantıları yönetmesine izin verin.
Şemalar (diğer adıyla protokoller) hakkında bilgi
Tekdüzen Kaynak Tanımlayıcısı (URI), soyut veya fiziksel bir kaynağı tanımlayan kompakt bir karakter dizisidir. Her URI, ilgili şemada tanımlayıcı atamayla ilgili bir spesifikasyonu belirten bir şema adıyla başlar. Bu nedenle URI söz dizimi, her şemanın spesifikasyonunun söz konusu şemayı kullanan tanımlayıcıların söz dizimini ve anlamını daha da kısıtlayabileceği birleşik ve genişletilebilir bir adlandırma sistemidir. Şemalar, protokoller olarak da bilinir. Aşağıda bazı şema örneklerini görebilirsiniz.
tel:+1-816-555-1212
mailto:Jane.Doe@example.com
news:comp.infosystems.www.servers.unix
https://web.dev/
Tekdüzen Kaynak Konum Belirleyici (URL) terimi, bir kaynağı tanımlamanın yanı sıra birincil erişim mekanizmasını (ör. ağ konumu) açıklayarak kaynağın yerini belirleme olanağı sağlayan URI alt kümesini ifade eder.
registerProtocolHandler()
yöntemi hakkında bilgi
Yalnızca güvenli içerik Navigator
yöntemi
registerProtocolHandler()
sitelerin belirli URL şemalarını açma veya işleme kapasitelerini kaydettirmesine olanak tanır. Bu nedenle, sitelerin yöntemi şu şekilde çağırması gerekir: navigator.registerProtocolHandler(scheme, url)
. Bu iki parametre aşağıdaki şekilde tanımlanır:
scheme
: Sitenin işlemek istediği protokolü içeren bir dize.url
: İşleyicinin URL'sini içeren bir dize. Bu URL, işlenecek URL'nin yerine geçecek bir yer tutucu olarak%s
içermelidir.
Şema, güvenli listedeki şemalardan (ör. mailto
, bitcoin
veya magnet
) biri olmalı ya da web+
ile başlamalı ve web+
ön ekinin ardından en az bir veya daha fazla küçük harfli ASCII harfi (ör. web+coffee
) gelmelidir.
Bunu daha net bir şekilde açıklamak için akışa dair somut bir örnek verilmiştir:
- Kullanıcı,
https://coffeeshop.example.com/
adresindeki bir siteyi ziyaret eder. Bu site şu çağrıyı yapar:navigator.registerProtocolHandler('web+coffee', 'coffee?type=%s')
. - Daha sonra, kullanıcı
https://randomsite.example.com/
'ü ziyaret ederken<a href="web+coffee:latte-macchiato">All about latte macchiato</a>
gibi bir bağlantıyı tıklar. - Bu işlem, tarayıcının şu URL'ye gitmesine neden olur:
https://coffeeshop.example.com/coffee?type=web%2Bcoffee%3A%2F%2Flatte-macchiato
. Kodu çözülmüş arama dizesi?type=web+coffee://latte-macchiato
olarak okunur.
Protokol işlemenin ne hakkında olduğu
Mevcut PWA'lar için URL protokol işleyici kaydı mekanizması, manifest aracılığıyla PWA yüklemesinin bir parçası olarak protokol işleyici kaydı sunmaktır. Bir PWA protokol işleyici olarak kaydedildikten sonra, kullanıcı bir tarayıcıdan veya platforma özel bir uygulamadan mailto
, bitcoin
veya web+music
gibi belirli bir şemaya sahip bir köprü bağlantısını tıkladığında kayıtlı PWA açılır ve URL'yi alır. Hem önerilen manifest tabanlı kayıt işleminin hem de geleneksel registerProtocolHandler()
'ün pratikte çok benzer roller oynadığını ve yine de tamamlayıcı kullanıcı deneyimleri sunduğunu belirtmek önemlidir:
- Kayıtlanmasına izin verilen şema listesinin yanı sıra parametrelerin adı ve biçimi gibi konularla ilgili şartlar benzerliklerden bazılarıdır.
- Manifest tabanlı kayıttaki farklılıklar küçük olsa da PWA kullanıcılarının deneyimini iyileştirmek için yararlı olabilir. Örneğin, manifest tabanlı PWA kaydı, kullanıcı tarafından başlatılan PWA yüklemesi dışında ek bir kullanıcı işlemi gerektirmeyebilir.
Kullanım alanları
- Kelime işleme PWA'sında, dokümanda bulunan kullanıcı
web+presentations://deck2378465
gibi bir sununun bağlantısıyla karşılaşır. Kullanıcı bağlantıyı tıkladığında sunu PWA'sı otomatik olarak doğru kapsamda açılır ve slayt gösterisini gösterir. - Platforma özel bir sohbet uygulamasında, sohbet mesajındaki kullanıcıya bir
magnet
URL'sinin bağlantısı gönderilir. Bağlantı tıklandığında, yüklü bir torrent PWA'sı açılır ve indirme işlemi başlar. - Kullanıcının yüklü bir müzik yayını PWA'sı varsa Bir arkadaşınız
web+music://songid=1234&time=0:13
gibi bir şarkının bağlantısını paylaştığında ve kullanıcı bağlantıyı tıkladığında müzik akışına yönelik PWA bağımsız bir pencerede otomatik olarak açılır.
PWA'lar için URL protokol işleyici kaydını kullanma
URL protokol işleyici kaydı için API, navigator.registerProtocolHandler()
'e yakın bir şekilde modellenmiştir. Ancak bu kez bilgiler, web uygulaması manifesti aracılığıyla "protocol_handlers"
adlı yeni bir mülkte beyanla iletilir. Bu mülk, "protocol"
ve "url"
adlı iki zorunlu anahtara sahip bir nesne dizisi alır. Aşağıdaki kod snippet'inde, web+tea
ve web+coffee
öğelerinin nasıl kaydedileceği gösterilmektedir. Değerler, çıkış karakterli URL için gerekli %s
yer tutucusuyla birlikte işleyicinin URL'sini içeren dizelerdir.
{
"protocol_handlers": [
{
"protocol": "web+tea",
"url": "/tea?type=%s"
},
{
"protocol": "web+coffee",
"url": "/coffee?type=%s"
}
]
}
Aynı protokole kayıtlı birden fazla uygulama
Birden fazla uygulama kendilerini aynı şema (ör. mailto
protokolü) için işleyici olarak kaydederse işletim sistemi kullanıcıya bir seçici gösterir ve kayıtlı işleyicilerden hangisinin kullanılacağına karar vermesine olanak tanır.
Aynı uygulamanın birden fazla protokole kaydolması
Yukarıdaki kod örneğinde görüldüğü gibi, aynı uygulama birden fazla protokol için kendini kaydedebilir.
Uygulama güncellemeleri ve işleyici kaydı
İşleyici kayıtları, uygulama tarafından sağlanan en son manifest sürümüyle senkronize edilir. İki durum vardır:
- Yeni işleyiciler ekleyen bir güncelleme, işleyici kaydını tetikler (uygulama yükleme işleminden ayrıdır).
- İşleyicileri kaldıran bir güncelleme, işleyicinin kaydını iptal eder (uygulama kaldırma işleminden ayrıdır).
Geliştirici Araçları'nda protokol işleyici hata ayıklama
Uygulama > Manifest bölmesinden Protokol işleyicileri bölümüne gidin. Mevcut tüm protokolleri burada görüntüleyebilir ve test edebilirsiniz.
Örneğin, bu demo PWA'yı yükleyin. Protokol işleyicileri bölümünde "americano" yazın ve Protokolü test et'i tıklayarak PWA'da kahve sayfasını açın.
Demo
PWA'lar için URL protokol işleyici kaydının bir demosunu Glitch'te görebilirsiniz.
- https://protocol-handler.glitch.me/ adresine gidin, PWA'yı yükleyin ve yükleme işleminden sonra uygulamayı yeniden yükleyin. Tarayıcı, PWA'yı işletim sistemine
web+coffee
protokolü için bir işleyici olarak kaydetti. - Yüklü PWA penceresinde https://protocol-handler-link.glitch.me/ bağlantısını tıklayın. Bu işlem, üç bağlantı içeren yeni bir tarayıcı sekmesi açar. İlk veya ikinciyi (latte macchiato ya da americano) tıklayın. Tarayıcı, size bir istem göstererek uygulamanın
web+coffee
protokolü için bir protokol işleyicisi olmasını kabul edip etmediğinizi sorar. Kabul ederseniz PWA açılır ve seçilen kahve gösterilir. navigator.registerProtocolHandler()
kullanan geleneksel akışla karşılaştırmak için PWA'da Protokol işleyiciyi kaydet düğmesini tıklayın. Ardından tarayıcı sekmesinde üçüncü bağlantıyı (chai) tıklayın. Bu durumda da bir istem gösterilir ancak PWA, tarayıcı penceresinde değil, sekmede açılır.- Windows'daki Skype gibi platforma özel bir uygulamada kendinize
<a href="web+coffee://americano">Americano</a>
gibi bir bağlantı içeren bir mesaj gönderin ve bağlantıyı tıklayın. Bu işlem, yüklü PWA'yı da açar.
Güvenlikle ilgili olarak göz önünde bulundurulması gerekenler
PWA kurulumu bağlamın güvenli olmasını gerektirdiğinden, protokol işleme bu kısıtlamayı devralır. Kayıtlı protokol işleyicilerinin listesi web'e hiçbir şekilde gösterilmez. Bu nedenle, parmak izi vektörü olarak kullanılamaz.
Kullanıcı tarafından başlatılmayan gezinme denemeleri
Kullanıcı tarafından başlatılmayan ancak programatik olan gezinme denemeleri uygulamaları açmayabilir. Özel protokol URL'si yalnızca üst düzey tarama bağlamlarında kullanılabilir ancak örneğin bir iframe'in URL'si olarak kullanılamaz.
Protokollerin izin verilenler listesi
registerProtocolHandler()
'te olduğu gibi, uygulamaların işleyebilmek için kaydettirebileceği protokollerin izin verilenler listesi vardır.
İzin istemi
PWA'nın çağrılan bir protokol nedeniyle ilk kez başlatılmasında kullanıcıya izin iletişim kutusu gösterilir. Bu iletişim kutusunda uygulamanın adı ve kaynağı gösterilir ve kullanıcıdan uygulamanın protokoldeki bağlantıları işlemesine izin verilip verilmediğini sorar. Kullanıcı izin iletişim kutusunu reddederse kayıtlı protokol işleyici işletim sistemi tarafından yoksayılır. Protokol işleyicinin kaydını iptal etmek için kullanıcının, işleyiciyi kaydeden PWA'yı kaldırması gerekir. Kullanıcı "Seçimimi hatırla"yı ve "İzin verme"yi seçerse tarayıcı, protokol işleyicinin kaydını da siler.
Geri bildirim
Chromium ekibi, PWA'lar için URL protokol işleyici kaydıyla ilgili deneyimlerinizi öğrenmek istiyor.
API tasarımı hakkında bilgi verin
API ile ilgili olarak beklediğiniz gibi çalışmayan bir şey var mı? Yoksa fikrinizi uygulamak için ihtiyaç duyduğunuz yöntemler veya özellikler eksik mi? Güvenlik modeliyle ilgili sorunuz veya yorumunuz mu var? İlgili GitHub deposunda spesifikasyon sorunu oluşturun veya mevcut bir soruna düşüncelerinizi ekleyin.
Uygulamayla ilgili sorunları bildirme
Chromium'un uygulamasında bir hata mı buldunuz? Yoksa uygulama, spesifikasyondan farklı mı?
new.crbug.com adresinden hata kaydı oluşturun. Mümkün olduğunca fazla ayrıntı ekleyin, hatayı yeniden oluşturmayla ilgili basit talimatlar verin ve Bileşenler kutusuna UI>Browser>WebAppInstalls
yazın. Glitch, hızlı ve kolay yeniden oluşturma işlemlerini paylaşmak için idealdir.
API'yi destekleme
PWA'lar için URL protokol işleyici kaydını kullanmayı planlıyor musunuz? Herkese açık desteğiniz, Chromium ekibinin özelliklere öncelik vermesine yardımcı olur ve diğer tarayıcı tedarikçi firmalarına bu özellikleri desteklemenin ne kadar önemli olduğunu gösterir.
WICG Discourse mesaj dizisinde bu özelliği nasıl kullanmayı planladığınızı paylaşın. #ProtocolHandler
hashtag'ini kullanarak @ChromiumDev hesabına bir Tweet gönderin ve bu özelliği nerede ve nasıl kullandığınızı bize bildirin.
Faydalı bağlantı
Teşekkür ederiz
PWA'lar için URL protokol işleyici kaydı, Microsoft Edge ekibinden Fabio Rocha, Diego González, Connor Moody ve Samuel Tang tarafından uygulandı ve tanımlandı. Bu makale Joe Medley ve Fabio Rocha tarafından incelenmiştir. Unsplash'taki JJ Ying tarafından oluşturulan hero resim.