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.
https://scrapbook-pwa.web.app/ adresindeki demo uygulaması, bu makalenin PWA'sı olarak kullanılacak ve kaynak koduna GitHub'dan erişilebilir. Android uygulaması, temel Güvenilir Web Etkinliği demosunu temel alı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/dizeler.xml
Uygulamanın, almayı desteklediği paylaşımın ayrıntılarını (hangi URL'lerin açılacağı, kullanılacak yöntem ve desteklenen MIME türleri gibi) Güvenilir Web Etkinliği'ne 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:
- İşlem özelliğinin değeri, kaynak dahil olmak üzere tam URL olmalıdır.
- Ç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
öğesinin bildirildiğinden, dışa aktarıldığından ve etkinleştirildiğinden emin olmamız gerekiyor.
Uygulamalarını temel demoya dayalı olarak oluşturan geliştiriciler, hizmeti zaten dahil etmiş olurlar ve işaretleme, uygulama etiketinin içinde olmalıdır 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 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örebileceğiniz gibi, share_target
JSON dosyasında bildirilen 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ında API'yi desteklemek için gereken ek işaretleme, android-browser-helper tarafından kolaylaştırılmıştır.
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, uygulama tarafından yönetilen doğru işlemleri, kategoriyi ve mime-types
'ı içerdiğinden emin olun.
Uygulamam seçenek olarak görünüyor, PWA başlatıldı 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.