웹 공유 타겟을 사용하면 PWA가 기기에 설치된 다른 애플리케이션에서 공유 콘텐츠를 수신할 수 있습니다. 이 기능은 예를 들어 이미지 편집기와 같은 애플리케이션에서 카메라 앱에서 이미지를 수신하거나 소셜 네트워크에서 공유할 이미지 또는 동영상을 수신하는 데 사용할 수 있습니다.
Chrome 86부터 이제 신뢰할 수 있는 웹 활동을 사용하는 애플리케이션에서도 웹 공유 타겟을 사용할 수 있습니다. PWA는 즉시 사용할 수 있지만 Android 애플리케이션은 몇 가지 변경이 필요합니다.
이 도움말은 개발자가 신뢰할 수 있는 웹 활동에 익숙하다고 가정합니다. 기술을 처음 접하는 독자는 통합 가이드를 참고하여 시작할 수 있습니다.
마찬가지로, PWA의 웹 공유 타겟 구현에 관한 자세한 설명은 이 범위를 벗어나며, 개발자는 이 도움말에서 자세한 내용을 확인할 수 있습니다.
https://scrapbook-pwa.web.app/의 데모 애플리케이션은 이 도움말의 PWA로 사용되며, 소스 코드는 GitHub에서 제공되며 Android 애플리케이션은 기본 신뢰할 수 있는 웹 활동 데모를 기반으로 합니다.
Android 앱에 웹 공유 타겟 추가
웹 공유 타겟을 구현하도록 기존의 신뢰할 수 있는 웹 활동 기반 애플리케이션을 수정하려면 세 가지 파일을 수정해야 합니다.
build.gradle
android-browser-helper 라이브러리가 웹 공유 타겟을 지원하도록 업데이트되었습니다. 첫 번째 단계로 2.0.1 이상 버전을 사용하도록 애플리케이션을 업데이트합니다.
dependencies {
...
implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.2.0'
}
res/strings.xml
애플리케이션은 신뢰할 수 있는 웹 활동에 열 URL, 사용할 메서드, 지원되는 MIME 유형 등 수신을 지원하는 공유의 세부정보를 알려야 합니다.
이는 문자열 리소스와 함께 신뢰할 수 있는 웹 활동에서 사용할 수 있는 JSON을 통해 이루어집니다. 이 필드는 웹 매니페스트에서 사용할 수 있는 share_target
필드와 동일하며, 다음과 같은 두 가지 중요한 참고사항과 함께 거의 그대로 strings.xml
안의 문자열에 추가할 수 있습니다.
- 액션 속성 값은 출처를 포함한 전체 URL이어야 합니다.
- 큰따옴표는 이스케이프 처리되어야 하므로 각
"
가\"
가 됩니다.
https://scrapbook-pwa.web.app/manifest.json의 share_target
섹션은 다음과 같이 표시됩니다.
{
...
"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 매니페스트에 몇 가지를 변경해야 합니다. 먼저 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 활동 태그에 추가해야 합니다.
- strings.xml에 정의된 JSON을 참조하는 meta-data
태그
- 애플리케이션이 기기의 다른 앱에 처리할 수 있는 MIME 유형을 선언하는 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>
위 마크업에서 볼 수 있듯이 share_target
JSON에 선언된 각 mime-type
에 data
요소를 추가해야 합니다.
결론
웹 공유 타겟 통합을 사용하면 신뢰할 수 있는 웹 활동 내의 PWA를 Android 기기에 설치된 다른 애플리케이션과 더 긴밀하게 통합할 수 있습니다.
위 단계에서 설명한 것처럼, 신뢰할 수 있는 웹 활동을 사용하는 기존 Android 앱에서 API 지원을 추가하는 데 필요한 추가 마크업은 android-browser-helper를 통해 더 간단하게 이루어집니다.
PWA에서 API를 사용하는 방법에 관한 자세한 내용은 웹 공유 타겟 도움말을 참고하고 Web Share API에서 프로그레시브 웹 앱에서 콘텐츠를 공유하는 방법을 알아보세요.
문제 해결
다른 애플리케이션에서 파일을 공유하려고 할 때 내 애플리케이션이 옵션으로 표시되지 않습니다.
애플리케이션이 옵션으로 표시되지 않으면 intent-filter
가 잘못되었음을 나타냅니다. intent-filter
마크업을 다시 확인하고 애플리케이션에서 처리하는 올바른 작업, 카테고리 및 mime-types
가 포함되어 있는지 확인합니다.
내 애플리케이션이 옵션으로 표시되고 PWA가 시작되었지만 데이터가 공유되지 않습니다.
이러한 문제의 원인은 다음과 같습니다. 다음은 확인할 사항의 체크리스트입니다.
- 디지털 애셋 링크 유효성 검사가 성공했는지 확인합니다.
- strings.xml 내부에 있는 JSON이 올바른지 확인하세요.