Güvenilir Web Etkinliğinde Web Paylaşımı Hedefi'ni etkinleştir

Web Share Target, PWA'ların cihaza yüklenen diğer uygulamalardan paylaşılan içerikleri almasını sağlar. Bu özellik, örneğin, bir kamera uygulamasından resim almak için resim düzenleyiciler veya paylaşmak üzere resim ya da video almak için sosyal ağlar gibi uygulamalar tarafından kullanılabilir.

Chrome 86'dan itibaren Web Share Target, Trusted Web Activity kullanan uygulamalarda da kullanılabilir. PWA'nın hemen çalışması gerekir ancak Android uygulamasında birkaç değişiklik yapılması gerekir.

Bu makalede, geliştiricinin güvenilir web etkinlikleri hakkında bilgi sahibi olduğu varsayılmaktadır. Teknolojiyi yeni kullanmaya başlayan okuyucular Entegrasyon Kılavuzu ile başlayabilir.

Aynı şekilde, bir PWA'da Web Share Target uygulamasının tam açıklaması kapsam dışındadır ve geliştiriciler bu makalede daha fazla bilgi bulabilir.

https://scrapbook-pwa.web.app/ adresindeki demo uygulaması, bu makalede PWA olarak kullanılacak. Kaynak kodu GitHub'da, Android uygulaması ise temel Trusted Web Activity demosuna dayalıdır.

Android uygulamasına Web Share Target ekleme

Mevcut bir Güvenilir Web Etkinliği tabanlı uygulamayı Web Share Target'ı uygulayacak şekilde değiştirmek için üç farklı dosyada değişiklik yapılması gerekir:

build.gradle

android-browser-helper kitaplığı, Web Share Target desteğiyle güncellendi. İlk adım olarak uygulamayı 2.0.1 veya sonraki bir sürümü kullanacak şekilde güncelleyin.

dependencies {
    ...
    implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.2.0'
}

res/strings.xml

Uygulama, hangi URL'lerin açılacağı, kullanılacak yöntem ve desteklenen MIME türleri gibi, desteklediği paylaşım alma ayrıntılarını güvenilir web etkinliğine bildirmelidir.

Bu işlem, dize kaynağıyla Güvenilir Web Etkinliği'nde kullanılabilen bir JSON aracılığıyla yapılır. Alanlar, Web Manifest'te bulunan share_target alanı ile aynıdır ve strings.xml içindeki bir dizeye neredeyse olduğu gibi eklenebilir. Ancak iki önemli nokta vardır:

  1. İşlem özelliğinin değeri, kaynak da dahil olmak üzere tam URL olmalıdır.
  2. Çift tırnak işaretlerinden kaçınılmalıdır. Bu nedenle, her ", \" olur.

https://googlechrome.github.io/samples/scrapbook-pwa/manifest.json adresinin share_target bölümü şu şekilde görünür:

{
  ...
  "share_target": {
    "action": "/_share-target",
    "enctype": "multipart/form-data",
    "method": "POST",
    "params": {
      "files": [{
        "name": "media",
        "accept": [
          "audio/*",
          "image/*",
          "video/*"
        ]
      }]
    }
  },
  ...
}

Yeni dize öğesi aşağıdaki gibi görünür:

<string name="share_target">
{
    \"action\": \"https://twa-web-scrapbook.web.app/_share-target\",
    \"method\": \"POST\",
    \"enctype\": \"multipart/form-data\",
    \"params\": {
      \"files\": [{
          \"name\": \"media\",
          \"accept\": [\"image/*\", \"audio/*\", \"video/*\"]
      }]
    }
}
</string>

AndroidManifest.xml

Android Manifest'te birkaç değişiklik yapılması gerekir. Öncelikle DelegationService öğesinin beyan edildiğinden, dışa aktarıldığından ve etkinleştirildiğinden emin olmamız gerekir.

Uygulamalarını temel demoya göre oluşturan geliştiriciler, hizmeti zaten dahil etmiş olurlar. İşaretleme, uygulama etiketinin içinde yer almalı ve aşağıdaki gibi görünmelidir:

<service
    android:name="com.google.androidbrowserhelper.trusted.DelegationService"
    android:enabled="true"
    android:exported="true">

    <intent-filter>
        <action android:name="android.support.customtabs.trusted.TRUSTED_WEB_ACTIVITY_SERVICE"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</service>

Son olarak, LauncherActivity etkinlik etiketine iki yeni öğe eklenmesi gerekir: - strings.xml dosyasında tanımlanan JSON'a referans veren bir meta-data etiketi. - Uygulamanın cihazdaki diğer uygulamalara hangi MIME türlerini işleyebildiğini bildiren bir intent-filter.

<meta-data
    android:name="android.support.customtabs.trusted.METADATA_SHARE_TARGET"
    android:resource="@string/share_target"/>

<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <action android:name="android.intent.action.SEND_MULTIPLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="audio/*" />
    <data android:mimeType="image/*" />
    <data android:mimeType="video/*" />
</intent-filter>

Yukarıdaki işaretlemede görüldüğü gibi, share_target JSON'da belirtilen her mime-type için bir data öğesi eklenmelidir.

Sonuç

Web Share Target entegrasyonu, Trusted Web Activity içindeki PWA'ların Android cihaza yüklenen diğer uygulamalarla daha derinlemesine entegre edilmesini sağlar.

Yukarıdaki adımlarda açıklandığı gibi, Trusted Web Activity kullanan mevcut bir Android uygulamasına API desteği eklemek için gereken ek işaretleme, android-browser-helper ile basitleştirilir.

PWA'da API'yi kullanma hakkında daha fazla bilgi edinmek için Web Share Target makalesini, Progresif Web Uygulaması'ndan içerik paylaşma hakkında bilgi edinmek için Web Share API makalesini inceleyin.

Sorun giderme

Başka bir uygulamadan dosya paylaşmaya çalıştığımda uygulamam seçenekler arasında görünmüyor.

Uygulama seçenek olarak gösterilmiyorsa intent-filter değerinin yanlış olduğu anlaşılır. intent-filter işaretlemeyi tekrar kontrol edin, uygulamanın doğru işlemleri, kategoriyi ve mime-types içerdiğinden emin olun.

Uygulamam seçenek olarak gösteriliyor, PWA başlatılıyor ancak veriler paylaşılmıyor.

Bunun birkaç nedeni olabilir. Aşağıda kontrol etmeniz gereken noktaların listesi verilmiştir:

  • Digital Asset Links doğrulamasının başarılı olduğundan emin olun.
  • strings.xml dosyasındaki JSON'un doğru olup olmadığını kontrol edin.