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

André Cipriani Bandarra
André Cipriani Bandarra

Web Paylaşımı Hedefi, PWA'ların cihazda yüklü diğer uygulamalardan paylaşılan içerik almasını sağlar. Bu özellik, örneğin, bir kamera uygulamasından resim almak için resim düzenleyiciler gibi uygulamalar veya paylaşmak üzere bir resim veya video almak için sosyal ağ tarafından kullanılabilir.

Chrome 86'dan itibaren Web Paylaşımı Hedefi, artık Güvenilir Web Etkinliği'ni kullanan uygulamalar tarafından da kullanılabilir. PWA hemen çalışmalıdır, 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. Teknolojide yeni olan okuyucular, Entegrasyon Kılavuzu'nu kullanmaya başlayabilir.

Aynı şekilde, PWA'daki Web Paylaşımı Hedefi uygulamasının tam açıklaması kapsam dışındadır. Geliştiriciler bu makalede daha fazla bilgi bulabilir.

Bu makale için https://scrapbook-pwa.web.app/ adresindeki demo uygulaması PWA olarak kullanılır. Kaynak koduna GitHub'dan ulaşılabilir. Android Uygulaması, temel Güvenilir Web Etkinliği demosunu temel alır.

Android uygulamasına Web Paylaşımı Hedefi ekle

Web Paylaşımı Hedefini uygulamak üzere mevcut bir Güvenilir Web Etkinliği tabanlı mevcut bir uygulamayı değiştirmek için üç farklı dosyada değişiklik yapılması gerekir:

build.gradle

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

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

res/strings.xml

Uygulamanın Güvenilir Web Etkinliği'ne, almayı desteklediği paylaşımla ilgili ayrıntıları (ör. hangi URL'lerin açılacağı, kullanılacak yöntem ve desteklenen mime türleri) bildirmesi gerekir.

Bu işlem, bir dize kaynağıyla Güvenilir Web Etkinliği'ne sunulmuş bir JSON yoluyla yapılır. Alanlar, Web Manifest'te bulunan share_target alanıyla aynıdır ve iki önemli notla birlikte strings.xml içindeki bir dizeye neredeyse olduğu gibi eklenebilir:

  1. İşlem özelliğinin değeri, kaynak dahil olmak üzere tam URL olmalıdır.
  2. Çift tırnak işaretlerinin atlanması gerekir, böylece her " \" olur.

https://scrapbook-pwa.web.app/manifest.json adresinin share_target bölümü aşağıdaki gibi görünür:

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

Ayrıca, yeni dize öğesi şöyle 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ı gerekiyor. Öncelikle DelegationService öğesinin bildirildiğinden, dışa aktarıldığından ve etkinleştirildiğinden emin olmalıyız.

Uygulamalarını temel demoya göre oluşturan geliştiricilere bu hizmet zaten dahil edilecektir ve işaretleme, uygulama etiketinin içinde olup 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 öğenin eklenmesi gerekiyor: -Strings.xml dosyasında tanımlanan JSON'a referans veren bir meta-data etiketi. - Uygulamanın cihazdaki diğer uygulamalar için hangi MIME türlerini işleyebileceğini tanımlayan 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ülebileceği gibi, share_target JSON'sinde tanımlanan her mime-type için bir data öğesi eklenmelidir.

Sonuç

Web Paylaşımı Hedefi entegrasyonu, Güvenilir Web Etkinliği içindeki PWA'ların, bir Android cihazda yüklü diğer uygulamalarla daha derin bir şekilde entegre edilmesini sağlar.

Yukarıdaki adımlarda açıklandığı gibi, Güvenilir Web Etkinliği kullanan mevcut bir Android uygulamasında API desteği eklemek için gereken ek işaretleme, android-browser-helper tarafından kolaylaştırılmıştır.

PWA'da API'yi kullanma konusunda daha fazla bilgi edinmek için Web Paylaşımı Hedefi makalesine göz atın. Progresif Web Uygulaması (PWA) üzerinden nasıl içerik paylaşacağınızı öğrenmek için de Web Share API'yi inceleyin.

Sorun giderme

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

Uygulamanın seçenek olarak gösterilmemesi, intent-filter özelliğinin yanlış olduğunu gösterir. intent-filter işaretlemesini tekrar kontrol edin ve uygulama tarafından işlenen doğru işlemleri, kategoriyi ve mime-types'ı içerdiğinden emin olun.

Uygulamamda seçenek olarak PWA başlatılıyor ama veriler paylaşılmıyor.

Buna neden olabilecek birkaç durum vardır. Bu, bakmanız gerekenlerin yer aldığı bir kontrol listesidir:

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