CordovaアプリにLive2Dを組み込んでいます。
Androidの仕様上、fetchではfile://の読み込みをサポートしていないみたいで、XMLHttpRequestにて取得する必要があります。
以下の関数を作成し、fetchをしているところをこれに置き換えています。
function fetchLocal(url) {
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest
xhr.onload = function() {
resolve(new Response(xhr.responseText, {status: xhr.status}))
}
xhr.onerror = function() {
reject(new TypeError(‘Local request failed’))
}
xhr.open(‘GET’, url)
xhr.send(null)
})
}
Jsonファイルは取得できるのですがmoc3ファイルのみ取得ができません。
何か解決方法があればご教授ください。
@みたこんぶ8011 様
ご質問誠にありがとうございます。
Live2Dスタッフでございます。
いつも弊社製品をご愛顧くださり誠にありがとうございます。
PCのブラウザ上など、Android以外の環境でも同様に読み込みができないかを確認していただけませんでしょうか?
また、開発環境の詳細をお教えいただければ幸いです。
よろしくお願いいたします。
やみ
3
@ono-at-live2d-com
私も同じ現象が起きています。
こちらの記事の手順で live2d_tyrano_plugin_v401 を導入したプロジェクトを Android Studioに読み込ませ、エミュレータで実行しようとすると、plugin\live2d\driver\index.js で以下のエラーが発生します。
※ビルドして実機で確認しても同様のエラーが発生しました。
※TyranoBuilderのデバッグモードや、ウェブアプリ・Windows/macOSアプリとしてデプロイしたものは問題なく動きます。
2024-05-19 01:45:09.421 10501-10501 chromium jp.tyrano.tyranoplayerframework I [INFO:CONSOLE(8702)] "New Tyrano Manager!", source: (8702)
2024-05-19 01:45:09.459 10501-10501 chromium jp.tyrano.tyranoplayerframework I [INFO:CONSOLE(7844)] "Fetch API cannot load file:///android_asset/data/others/plugin/live2d/model/Kyoka/Kyoka.model3.json. URL scheme "file" is not supported.", source: (7844)
2024-05-19 01:45:09.464 10501-10501 chromium jp.tyrano.tyranoplayerframework I [INFO:CONSOLE(7844)] "Uncaught (in promise) TypeError: Failed to fetch", source: file:///android_asset/ (7844)
ローカル(file:///)上で外部ファイル読み込みのセキュリティ制約を回避するには、fetch APIではなくXMLHttpRequestを使用する必要がありそうです。
最新のAndroid Studioの開発環境でも動作するようにしていただきたいです。
「いいね!」 1
Tak
4
いつも弊社製品をご愛顧のほど誠にありがとうございます。
Live2Dスタッフでございます。
fetch APIではなくXMLHttpRequestにてファイルを取得する場合ですが、XMLHttpRequestはfetch APIよりレガシーなAPIとなっており、fetch APIを使用しているCubism SDK for Webでは公式としての実装対応が難しいと考えられます。
ローカル(file:///)上で外部ファイル読み込みのセキュリティ制約を回避したい、という点では今後の改善としてXMLHttpRequestを使用しない形の方法があるか含め検討いたしますので、本件は要望としてお受け取りし開発に共有いたします。
またTyranoBuilderとのかけ合わせでAndroidに書き出すといった内容のサポートは、ティラノビルダー様へのお問い合わせがスムーズかと考えられます。
何卒よろしくお願いいたします。
Tak
5
Live2Dスタッフでございます。
日にちがだいぶ空いてしまい大変申し訳ありません。
表題の件について調査をいたしましたので、ご連絡差し上げます。
@みたこんぶ8011 様
日にちがだいぶ空いてしまっておりますのですでに回避済みであれば失礼いたします。
Cordova環境ではCordova自体がサーバー環境を展開しての実行ですので、Cortovaのリソースとして配置されたファイルに関してはmoc3ファイルでもfetchすることについては問題ございませんでした。
しかし、fetchができない場合について以下の状況を確認いたしました。
- 何らかの目的でファイルパスがfile: をつかってハードコーディングされている場合
- ファイルベースでモデルを選択できるアプリを制作している場合
前者につきましては、ブラウザ(サーバー環境)ではセキュリティポリシー上ローカルファイルにアクセスできないためCordovaの仕様とみられます。
後者につきましては、ローカルファイルを参照する場合はユーザーがファイルを選択することが必要なため、フォームのような処理でファイルを選択しFileReaderを使用してください。
@やみ 様
こちらに関しましてもすでに回避済みでしたら失礼いたします。
本件もファイル読み込みの実装が問題と考えられ、問題が一致する場合みたこんぶ8011 様のご回答にあることが理由となります。
またXMLHttpRequestでもfetchと同じく、セキュリティ制約のためローカルファイルでは取り扱えないかと存じます。
そのため、ティラノビルダー側のリソースとして読み込んでおくことが良いのではないかと考えます。