Open2
Flutterでのアプリ開発で躓いたところを溜めるスクラップ
path_providerを利用時に、Androidだけダウンロードに失敗
CloudStorageからファイルをダウンロードして、端末にダウンロードを実装中に、iOSの実機、Simulatorでは問題なくダウンロードができていたが、なぜかAndroidのみ下記のエラーが発生。
利用パッケージ
dependencies:
flutter:
sdk: flutter
firebase_core: ^0.7.0
firebase_storage: ^7.0.0
path_provider: ^1.6.28
ソース
Directory appDocDir = await getApplicationDocumentsDirectory();
File downloadToFile = File('${appDocDir.path}/test/12345678901234567890.json');
//CloufStorageからファイルを取得し、ローカルに保存
await firebase_storage.FirebaseStorage.instance
.ref('test/12345678901234567890.json')
.writeToFile(downloadToFile);
エラーメッセージ
E/FileDownloadTask(11563): Exception occurred during file write. Aborting.
E/FileDownloadTask(11563): java.io.IOException: No such file or directory
E/FileDownloadTask(11563): at java.io.UnixFileSystem.createFileExclusively0(Native Method)
E/FileDownloadTask(11563): at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
E/FileDownloadTask(11563): at java.io.File.createNewFile(File.java:1006)
E/FileDownloadTask(11563): at com.google.firebase.storage.FileDownloadTask.processResponse(FileDownloadTask.java:136)
E/FileDownloadTask(11563): at com.google.firebase.storage.FileDownloadTask.run(FileDownloadTask.java:228)
E/FileDownloadTask(11563): at com.google.firebase.storage.StorageTask.lambda$getRunnable$7$StorageTask(StorageTask.java:1072)
E/FileDownloadTask(11563): at com.google.firebase.storage.-$$Lambda$StorageTask$q9YBoR_A8LB-JxTCx8JRQvabaZs.run(Unknown Source:2)
E/FileDownloadTask(11563): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/FileDownloadTask(11563): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/FileDownloadTask(11563): at java.lang.Thread.run(Thread.java:920)
E/StorageException(11563): StorageException has occurred.
E/StorageException(11563): An unknown error occurred, please check the HTTP result code and inner exception for server response.
E/StorageException(11563): Code: -13000 HttpResult: 200
E/StorageException(11563): No such file or directory
E/StorageException(11563): java.io.IOException: No such file or directory
E/StorageException(11563): at java.io.UnixFileSystem.createFileExclusively0(Native Method)
E/StorageException(11563): at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
E/StorageException(11563): at java.io.File.createNewFile(File.java:1006)
E/StorageException(11563): at com.google.firebase.storage.FileDownloadTask.processResponse(FileDownloadTask.java:136)
E/StorageException(11563): at com.google.firebase.storage.FileDownloadTask.run(FileDownloadTask.java:228)
E/StorageException(11563): at com.google.firebase.storage.StorageTask.lambda$getRunnable$7$StorageTask(StorageTask.java:1072)
E/StorageException(11563): at com.google.firebase.storage.-$$Lambda$StorageTask$q9YBoR_A8LB-JxTCx8JRQvabaZs.run(Unknown Source:2)
E/StorageException(11563): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/StorageException(11563): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/StorageException(11563): at java.lang.Thread.run(Thread.java:920)
E/StorageException(11563): StorageException has occurred.
E/StorageException(11563): An unknown error occurred, please check the HTTP result code and inner exception for server response.
E/StorageException(11563): Code: -13000 HttpResult: 200
E/StorageException(11563): No such file or directory
E/StorageException(11563): java.io.IOException: No such file or directory
E/StorageException(11563): at java.io.UnixFileSystem.createFileExclusively0(Native Method)
E/StorageException(11563): at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
E/StorageException(11563): at java.io.File.createNewFile(File.java:1006)
E/StorageException(11563): at com.google.firebase.storage.FileDownloadTask.processResponse(FileDownloadTask.java:136)
E/StorageException(11563): at com.google.firebase.storage.FileDownloadTask.run(FileDownloadTask.java:228)
E/StorageException(11563): at com.google.firebase.storage.StorageTask.lambda$getRunnable$7$StorageTask(StorageTask.java:1072)
E/StorageException(11563): at com.google.firebase.storage.-$$Lambda$StorageTask$q9YBoR_A8LB-JxTCx8JRQvabaZs.run(Unknown Source:2)
E/StorageException(11563): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/StorageException(11563): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/StorageException(11563): at java.lang.Thread.run(Thread.java:920)
解決方法
testディレクトリに格納するのをやめた結果、問題なくAndroidの方でも実機、emulatorともに動作することが確認できました。
パスの長さかと思ったが、ファイル名だけ長くしても問題はなかったので、ディレクトリを含めちゃうとダメだった?みたいです。
File('${appDocDir.path}/test/12345678901234567890.json');
File('${appDocDir.path}/12345678901234567890.json');
Cloud Translation APIをAndroidのみで利用とした時のHTTPリクエストのHTTPヘッダーの設定について
APIキーの制限をAndroidアプリにした際に、パッケージ名とSHA-1証明書のフィンガープリントをGCP上で設定し、dart側のリクエストを投げるところでもHTTPヘッダーを付与しリクエストしたにもかかわらず、エラーが返ってきた。
エラー時のヘッダーのソース
const HEADERS = {
'Content-Type': 'application/json',
'X-Android-Package': 'com.example.test',
'X-Android-Cert': '00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00',
};
解決方法
X-Android-Certの設定値は、コロン「:」を含めてはNGみたいのため、コロンを除いた形とする。
※値は各自の値に置き換えること。
const HEADERS = {
'Content-Type': 'application/json',
'X-Android-Package': 'com.example.test',
'X-Android-Cert': '0000000000000000000000000000000000000000',
};