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

Web Paylaşım Hedefi, PWA'ların cihazda yüklü 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şılacak bir resim ya da video almak için sosyal ağlar tarafından kullanılabilir.

Chrome 86'dan itibaren Web Paylaşım Hedefi, Güvenilir Web Etkinliği kullanan uygulamalar tarafından da kullanılabilir. PWA'nın sorunsuz çalışması gerekir ancak Android uygulamasında birkaç değişiklik yapılması gerekir.

Bu makalede, geliştiricinin Güvenilir Web Etkinlikleri'ni bildiği varsayılmaktadır. Teknolojiyle yeni tanışan okuyucular Entegrasyon Kılavuzu'nu inceleyebilir.

Benzer şekilde, PWA'larda Web Paylaşımı Hedefi'nin uygulanmasıyla ilgili tam açıklama kapsam dışındadır. Geliştiriciler daha fazla bilgiyi bu makalede bulabilir.

Bu makale için PWA olarak https://scrapbook-pwa.web.app/ adresindeki demo uygulama kullanılacaktır. Uygulamanın kaynak kodu GitHub'da mevcuttur. Android uygulaması ise temel Güvenilir Web Etkinliği demosuna dayanır.

Android uygulamasına web paylaşımı hedefi ekleme

Mevcut bir Güvenilir Web Etkinliği tabanlı uygulamayı, Web Paylaşımı Hedefi'ni uygulamak için değiştirmek üzere üç farklı dosyada değişiklik yapmanız gerekir:

build.gradle

android-browser-helper kitaplığı, Web Paylaşım Hedefi 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

Uygulamanın, Güvenilir Web Etkinliği'ne hangi URL'lerin açılacağı, kullanılacak yöntem ve desteklenen mime türleri gibi, alması desteklenen paylaşımın ayrıntılarını bildirmesi gerekir.

Bu işlem, Güvenilir Web Etkinliği'ne bir dize kaynağıyla sunulan bir JSON aracılığıyla gerçekleştirilir. Bu alanlar, Web Manifest'te bulunan share_target alanıyla aynıdır ve strings.xml içindeki bir dizeye neredeyse olduğu gibi eklenebilir. Bununla birlikte, iki önemli not vardır:

  1. action özelliğinin değeri, kaynak da dahil olmak üzere tam URL olmalıdır.
  2. Çift tırnak işaretleri, her "'ün \" olması için kaçak karakterle çevrilmelidir.

https://scrapbook-pwa.web.app/manifest.json dosyasının 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/*"
        ]
      }]
    }
  },
  ...
}

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 dosyasında birkaç değişiklik yapılması gerekiyor. Öncelikle DelegationService değerinin tanımlandığından, 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 eklemiş olacaktır. İşaretçi, uygulama etiketinin içinde yer alır ve aşağıdaki gibi görünür:

<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 eklenmelidir: - strings.xml'de tanımlanan JSON'a atıfta bulunan bir meta-data etiketi. - Uygulamanın cihazdaki diğer uygulamalara hangi mime türlerini işleyebileceğini belirten 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 tanımlanan her mime-type için bir data öğesi eklenmelidir.

Sonuç

Web Paylaşımı Hedefi entegrasyonu, Güvenilir Web Etkinliği'ndeki PWA'ların Android cihaza yüklenen diğer uygulamalarla daha derin entegrasyon yapmasını sağlar.

Yukarıdaki adımlarda açıklandığı gibi, Güvenilir Web Etkinliği'ni kullanan mevcut bir Android uygulamasına API desteği eklemek için gereken ek işaretleme, android-browser-helper tarafından basitleştirilmiştir.

API'yi PWA'da kullanma hakkında daha fazla bilgi edinmek için Web Paylaşımı Hedefi makalesine, Progresif Web Uygulaması'ndan içerik paylaşmayı öğrenmek için Web Paylaşımı API'sine göz atın.

Sorun giderme

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

Uygulama bir seçenek olarak gösterilmiyorsa intent-filter yanlıştır. intent-filter işaretlemesini tekrar kontrol edin, doğru işlemleri, kategoriyi ve uygulama tarafından işlenen mime-types öğesini içerdiğinden emin olun.

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

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

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