Web Share Target позволяет PWA получать общий контент из других приложений, установленных на устройстве. Эта функция может использоваться, например, такими приложениями, как редакторы изображений, чтобы получать изображение из приложения камеры, или социальной сетью, чтобы получать изображение или видео для обмена.
Начиная с Chrome 86, Web Share Target теперь также доступен для приложений, использующих Trusted Web Activity . Хотя PWA должен работать из коробки, необходимо внести несколько изменений в приложение Android.
В этой статье предполагается, что разработчик знаком с Trusted Web Activities. Читатели, которые не знакомы с технологией, могут начать с Integration Guide .
Аналогично, полное объяснение реализации Web Share Target в PWA выходит за рамки данной статьи, и разработчики могут найти дополнительную информацию в этой статье .
В качестве PWA для этой статьи будет использоваться демонстрационное приложение по адресу https://scrapbook-pwa.web.app/ , его исходный код доступен на GitHub , а приложение для Android основано на базовой демонстрации Trusted Web Activity .
Добавьте Web Share Target в приложение Android
Чтобы изменить существующее приложение на основе Trusted Web Activity для реализации Web Share Target, необходимо внести изменения в три различных файла:
сборка.градл
Библиотека android-browser-helper обновлена с поддержкой Web Share Target. В качестве первого шага обновите приложение, чтобы использовать версию выше или равную 2.0.1.
dependencies {
...
implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.2.0'
}
res/строки.xml
Приложение должно сообщить Trusted Web Activity сведения о поддерживаемом приеме общего доступа, например, какие URL-адреса открывать, используемый метод и поддерживаемые типы MIME.
Это делается через JSON, доступный Trusted Web Activity с ресурсом строки. Поля такие же, как поле share_target
, доступное в Web Manifest, и могут быть добавлены в строку внутри strings.xml
, почти как есть, с двумя важными примечаниями:
- Значение атрибута действия должно представлять собой полный URL-адрес, включая источник.
- Двойные кавычки необходимо экранировать, чтобы каждый
"
стал\"
.
Вот как выглядит раздел share_target
в https://scrapbook-pwa.web.app/manifest.json :
{
...
"share_target": {
"action": "/_share-target",
"enctype": "multipart/form-data",
"method": "POST",
"params": {
"files": [{
"name": "media",
"accept": [
"audio/*",
"image/*",
"video/*"
]
}]
}
},
...
}
И новый строковый элемент будет выглядеть следующим образом:
<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. Сначала нам нужно убедиться, что DelegationService
объявлен, экспортирован и включен.
Разработчики, создавшие свое приложение на основе базовой демоверсии, уже включат службу, а разметка должна находиться внутри тега приложения и выглядеть следующим образом:
<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>
Наконец, в тег активности LauncherActivity необходимо добавить два новых элемента: - Тег meta-data
, который ссылается на JSON, определенный в strings.xml. - intent-filter
, который объявляет, какие типы MIME приложение может обрабатывать для других приложений на устройстве.
<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>
Как видно из разметки выше, элемент data
должен быть добавлен для каждого mime-type
объявленного в share_target
JSON.
Заключение
Интеграция с Web Share Target позволяет более глубоко интегрировать PWA внутри Trusted Web Activity с другими приложениями, установленными на устройстве Android.
Как описано выше, дополнительная разметка, необходимая для добавления поддержки API в существующее приложение Android, использующее Trusted Web Activity, упрощается с помощью android-browser-helper.
Ознакомьтесь со статьей Web Share Target, чтобы узнать больше об использовании API в PWA, а также с Web Share API, чтобы узнать, как делиться контентом из Progressive Web App.
Поиск неисправностей
Мое приложение не отображается в качестве варианта при попытке поделиться файлом из другого приложения.
Если приложение не отображается как опция, это означает, что intent-filter
неверен. Дважды проверьте разметку intent-filter
, убедитесь, что она содержит правильные действия, категорию и mime-types
обрабатываемые приложением.
В моем приложении в качестве опции отображается PWA, запущенное, но данные не передаются.
Есть несколько вещей, которые могут вызвать это. Вот контрольный список того, на что следует обратить внимание:
- Убедитесь, что проверка ссылок на цифровые активы прошла успешно.
- Проверьте правильность JSON внутри strings.xml.