質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google Cloud Storage

Google Cloud Storageは、グーグル社が提供しているクラウドベースのデベロッパー・企業向けストレージサービス。可用性に優れ、APIで操作可能なため、データのアーカイブ保存やアプリケーションのコンテンツ提供など様々な用途に活用できます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1079閲覧

Unity)FB Storage Androidデバイステストがうまくいかない

navesanta

総合スコア198

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google Cloud Storage

Google Cloud Storageは、グーグル社が提供しているクラウドベースのデベロッパー・企業向けストレージサービス。可用性に優れ、APIで操作可能なため、データのアーカイブ保存やアプリケーションのコンテンツ提供など様々な用途に活用できます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/11/17 06:16

Cloud Storage for Unityを使ってFirebase Storageにアプリ内の画像を
送信したいです。

下記は完了しています。
・Android用のgoogle-servicesファイルはAssets内に設定済み
・Cloud Storage用のSDK(UnityPackage)もインポート済み
・Firebaseコンソールのアプリ登録やCloud Storageも作成済み
・Cloud Storageにimagesフォルダ作成済み

Unityのシュミレータでテストすると問題なくimagesフォルダ内に画像が
格納されます。

しかしAndroidデバイステストでAndroidにアプリをインストールして
シュミレータのようにテストをしてもなぜか格納されません。

ちなみにFirebaseのAuth認証ととRealTimeDatabaseへの格納はできます。
Androidデバイステストのみうまくいかないのはなぜでしょうか?

分かる方押してください。

環境)
PC: Windows10
Unity2019.4.0f1
言語:C#

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Firebase; using Firebase.Database; using Firebase.Unity.Editor; using Firebase.Storage; using System; public class SendDisplay : MonoBehaviour { [SerializeField]Image sendImage = null; [SerializeField]Text nickNameText = null; [SerializeField]InputField inputComment = null; //usrCommentMessage [SerializeField]Dropdown DdLevel = null; //Level [SerializeField]GameObject DialogNoBox = null; [SerializeField]GameObject DialogSended = null; List<PhotoType> photoList; string path; public int indexNo; DatabaseReference _FirebaseDB; //DBへ参照を持ったobjectを保持する。 FirebaseStorage _Storage; StorageReference storage_ref; StorageReference thumbNailFile_ref; Firebase.Auth.FirebaseUser _FirebaseUser; //Firebaseに接続した際の認証情報を保持する。 Firebase.Auth.FirebaseAuth auth; string userId; string nickName; string commentString; void Start() { auth = Firebase.Auth.FirebaseAuth.DefaultInstance; indexNo = PlayerPrefs.GetInt("indexno", 0); nickName = PlayerPrefs.GetString("nickname", ""); nickNameText.text = nickName; photoList = new List<PhotoType>(); photoList = PlayerPrefsUtility.LoadList<PhotoType>("photolist"); path = Application.persistentDataPath + "/" + photoList[indexNo].FileName +".png"; sendImage.sprite = LoadScript(path); AuthLogin(); //FirebaseAuth認証 //FirebaseDatabaseのインスタンスをセット FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://hogehoge.firebaseio.com/"); DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference; //FirebaseStorageのインスタンスをセット _Storage = FirebaseStorage.DefaultInstance; storage_ref = _Storage.GetReferenceFromUrl("gs://hogehoge.appspot.com"); } //Image表示 Sprite LoadScript(string path) { if(string.IsNullOrEmpty(path)) return null; if(System.IO.File.Exists(path)) { byte[] bytes = System.IO.File.ReadAllBytes(path); Texture2D texture2D = new Texture2D(1, 1); texture2D.LoadImage(bytes); Sprite sprite = Sprite.Create( texture2D, new Rect(0,0, texture2D.width, texture2D.height), new Vector2(0.5f, 0.5f)); return sprite; } return null; } public void OnClickStorageTest() { //サムネイル画像保存先を指定 thumbNailFile_ref = storage_ref.Child("images/" + _FirebaseUser.UserId + photoList[indexNo].FileName + ".png"); //サムネイル画像保存元を指定して送信 thumbNailFile_ref.PutFileAsync(path).ContinueWith((System.Threading.Tasks.Task<StorageMetadata> task) => { if(task.IsFaulted || task.IsCanceled){ //error処理 }else{ StorageMetadata metadata = task.Result; //success処理 } }); } public void OnClickSend() { inputComment = inputComment.GetComponent<InputField>(); commentString = inputComment.text; if(commentString == "") { DialogNoBox.SetActive(true); }else{ _FirebaseDB = FirebaseDatabase.DefaultInstance.GetReference("Lists"); Dictionary<string, object> itemMap = new Dictionary<string, object>(); itemMap.Add("Day", GetDateTime()); itemMap.Add("FileName", _FirebaseUser.UserId + indexNo.ToString("D3")); itemMap.Add("Level", DdLevel.value); itemMap.Add("UsrComment", commentString); itemMap.Add("Sender", nickName); itemMap.Add("Flag", 1); Dictionary<string, object> map = new Dictionary<string, object>(); map.Add(_FirebaseUser.UserId + indexNo.ToString("D3"), itemMap); _FirebaseDB.UpdateChildrenAsync(map); DialogSended.SetActive(true); } } void AuthLogin() { auth.SignInAnonymouslyAsync().ContinueWith(task => { if(task.IsCanceled){ Debug.LogError("SignInAnonymouslyAsync was canceled."); return; } if(task.IsFaulted){ Debug.LogError("SignInAnonymouslyAsync encountered an error:" + task.Exception); return; } _FirebaseUser = task.Result; Debug.LogFormat("User signed in succesfully: {0} ({1})", _FirebaseUser.DisplayName, _FirebaseUser.UserId); userId = _FirebaseUser.UserId; Debug.Log("authid:" + userId); // PlayerPrefs.SetString("authid", userId); }); PlayerPrefs.SetString("authid", "0000"); PlayerPrefs.Save(); } int GetDateTime() { DateTime now = DateTime.Now; return now.Year * 10000 + now.Month * 100 + now.Day; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

解決方法が分かりました。

PutFileAsync(path).ContinueWithを

Stream stream = new FileStream(local_filePath, FileMode.Open);
PutStreamAsync(stream).ContinueWithに変更したらうまくいきました。

投稿2020/11/18 06:50

navesanta

総合スコア198

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問