Web Share Target(ウェブ共有ターゲット): PWA はインストール済みの他のアプリケーションから共有コンテンツを受信できます クリックします。たとえば、画像エディタなどのアプリケーションで、 カメラアプリやソーシャル ネットワークから画像を受信し、画像や動画を受信して共有します。
Chrome 86 以降、ウェブ共有ターゲットは 信頼できるウェブ アクティビティ:PWA はすぐに使用できますが、そのためにいくつかの変更が必要です。 ダウンロードします。
この記事は、デベロッパーが Trusted Web Activity に精通していることを前提としています。初めて利用する読者 テクノロジーの利用については、統合ガイドをご覧ください。
同様に、PWA におけるウェブ共有ターゲットの実装については別の部分で説明します。 スコープをご確認ください。デベロッパーの方は、こちらの記事で詳細をご確認ください。
このデモ用の PWA として、https://scrapbook-pwa.web.app/ にあるデモ アプリケーションを使用します。 という記事で公開されており、そのソースコードは GitHub で入手できます。また、Android アプリは Trusted Web Activity の基本デモ
ウェブ共有ターゲットを Android アプリに追加する
既存の信頼できるウェブ アクティビティ ベースのアプリケーションを変更してウェブ共有を実装する ターゲットです。3 つの異なるファイルに対する変更が必要です。
build.gradle
ウェブ共有ターゲットのサポートに伴い、android-browser-helper ライブラリが更新されました。たとえば、 まず、バージョン 2.0.1 以降を使用するようにアプリケーションを更新します。
dependencies {
...
implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.2.0'
}
res/strings.xml
アプリは、信頼できるウェブ アクティビティに対し、サポートしている共有の詳細を伝える必要があります。 どの URL を開くか、使用する方法、サポートされている MIME タイプなど、受信メッセージに関連付けられた API 呼び出しを確認できます。
これは JSON を介して実行し、文字列リソースを使って Trusted Web Activity で利用できます。「
フィールドは、ウェブ マニフェストで使用可能な share_target
フィールドと同じであり、
strings.xml
内の文字列はほぼそのままですが、次の 2 つの重要な注意事項があります。
- action 属性の値には、オリジンを含む完全な 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 マニフェストにいくつかの変更を加える必要があります。まず、Google Cloud Storage に
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>
最後に、2 つの新しいアイテムを LauncherActivity アクティビティ タグに追加する必要があります。
-strings.xml で定義された JSON を参照する meta-data
タグ。
- アプリが他の MIME タイプを処理できる 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>
上記のマークアップからわかるように、宣言した mime-type
ごとに data
要素を追加する必要があります。
(share_target
JSON 内)。
まとめ
ウェブ共有ターゲットの統合により、信頼できるウェブ アクティビティ内の PWA がより深く Android デバイスにインストールされた他のアプリと統合できます。
上記の手順で説明したとおり、API のサポートを追加するには、 信頼できるウェブ アクティビティを使用する既存の Android アプリは、android-browser-helper によって簡単に作成されます。
PWA で API を使用する方法について詳しくは、ウェブ共有ターゲットに関する記事をご覧ください。 プログレッシブ ウェブアプリのコンテンツを共有する方法については、Web Share API をご覧ください。
トラブルシューティング
別のアプリケーションからファイルを共有しようとすると、アプリケーションがオプションとして表示されません。
アプリがオプションとして表示されない場合は、intent-filter
が
不正解。intent-filter
マークアップを再確認し、正しいアクションが含まれていることを確認します。
カテゴリ、mime-types
はアプリケーションで処理されます。
アプリケーションがオプションとして表示され、PWA が起動しますが、データが共有されません。
これにはいくつかの原因が考えられます。次のチェックリストをご確認ください。
- デジタル アセット リンクの検証が成功したことを確認します。
- strings.xml 内の JSON が正しいことを確認します。