본문 바로가기
아때(unity)

유니티)firebase 저장소 사용해서 이미지 업로드하기

by 때려쳐아니때려치지마 2023. 5. 31.
반응형

1. firebase 계정 생성

https://firebase.google.com/

 

Firebase

Firebase는 고품질 앱을 빠르게 개발하고 비즈니스를 성장시키는 데 도움이 되는 Google의 모바일 플랫폼입니다.

firebase.google.com

 

계정과 프로젝트를 생성한다

카테고리에서 빌드 > storage로 이동한다

처음 생성하게되면 시작하기 버튼을 누릅니다.

액세스권한은 생성후에도 수정이 가능하다

 


 

2. Firebase Unity SDK 

https://firebase.google.com/download/unity?hl=ko 

위 링크에서 unity용 sdk를 다운받는다.

전 저장소만 쓸거니까 firebaseStorage만 임포트했습니다.

 

 


 

2-1. google-services.json

 

google-services.json를 firebase에서 받아서 유니티에 넣어줍니다.

firebase 설정 버튼 > 프로젝트 설정

앱추가를 누른다음 unity를 선택합니다.

앱번들은 유니티 빌드 번들이랑 동일하게 적어줍니다.

정보들을 기입한후 google-services.json 다운로드 버튼을 눌러 json을 다운받고

유니티에서 streamingAssets 폴더를 생성해준후 해당 위치에 임포트합니다.

 


 

3. 파일 업로드하기 

firebase에서 storage > files에서 gs://~~로 되어있는 주소 정보를 복사합니다.

firebaseStorage와 storageReference 변수를 생성하고

reference 변수에 GetReferenceFromUri();에 복사했던 주소를 입력하여 레퍼런스를 할당해줍니다

StorageReference fileRef = reference.Child(name);

//저장소 주소에 추가할 파일명으로 생성합니다

PutBytesAsync(data)

//이미지 바이트 정보를 보냅니다

ContinueWithOnMainThread((Task<StorageMetadata> task) => {});

// 바이트 정보가 올라가는걸 기다렸다가 완료시 StorageMetadata를 받아서 추후 작업을 수행합니다.

여기까지 진행되면 업로드가 완료된상태입니다

 

GetDownloadUrlAsync() //업로드후 다운로드 링크를 불러옵니다.

마찬가지로 완료되면 uri로 다운로드 링크를 받아올수있습니다.

이렇게 테스트 해보면

스토리지에 올라가있고

이렇게 다운로드 링크가 받아지는걸 확인할수있습니다.

와~!

 

using Firebase.Extensions;
using Firebase.Storage;
using System.Threading.Tasks;

public class StorageManager : SingletonBehaviour<StorageManager>
{
    public FirebaseStorage storage;
    public StorageReference reference;

    void Awake()
    {
        storage = FirebaseStorage.DefaultInstance;
        reference = storage.GetReferenceFromUrl("gs://주소.appspot.com/");
        Debug.Log("INIT Firebase");
    }

    public void UploadGetDownLink(string name, byte[] data, Action<string> SendLink = null)
    {
        StorageReference fileRef = reference.Child(name);
        fileRef.PutBytesAsync(data).ContinueWithOnMainThread((Task<StorageMetadata> task) =>
        {
            if (task.IsFaulted || task.IsCanceled)
            {
                Debug.Log(task.Exception.ToString());
            }
            else
            {
                StorageMetadata metadata = task.Result;
                Debug.Log("Finished uploading");

                fileRef.GetDownloadUrlAsync().ContinueWithOnMainThread((Task<Uri> uriTask) =>
                {
                    string uri = uriTask.Result.ToString();
                    SendLink?.Invoke(uri);
                });
            }
        });
    }
}

 

 

오늘의 유니티스톡

젠장

 

끝~!

 

더보기

유니티세팅중 뜬 에러들

 

유니티에서 에러가 뜸1)

Assembly 'Assets/ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll' will not be loaded due to errors:
Unable to resolve reference 'UnityEditor.iOS.Extensions.Xcode'. Is the assembly missing or incompatible with the current platform?
Reference validation can be disabled in the Plugin Inspector.

https://github.com/firebase/firebase-unity-sdk/issues/623

 

[Bug] Assembly 'Assets/ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll' will not be loaded due to errors · Issu

[REQUIRED] Please fill in the following fields: Unity editor version: 2021.3.3f1 Firebase Unity SDK version: 10.4.0 Source you installed the SDK: unitypackage Problematic Firebase Component: Storag...

github.com

 

윈도우만 쓰더라도 상관없이 유니티에서 ios 모듈을  추가해줘야합니다.

 

 


 

google-services.json 없을시 로드 에러)

Unable to load Firebase app options ([C:/Users/me/Documents/UnityProjects/testFirebase/Assets/StreamingAssets\google-services-desktop.json,

윈도우빌드할거라서 해당되지 않을 줄 알았는데 오류뜸

https://github.com/firebase/firebase-cpp-sdk/issues/455

 

[Question] google-services.json for a desktop app · Issue #455 · firebase/firebase-cpp-sdk

[REQUIRED] Please fill in the following fields: Pre-built SDK from the website or open-source from this repo: latest repo Firebase C++ SDK version: latest commit Main Firebase Components in concern...

github.com

google-sevices.json을 streamingassets 폴더에 넣어서 로드될수있게 하던가

appOption을 설정할수 있는거같음

google-sevices.json를 import하면 google-sevices-desktop.json도 생성된다.

 


 

유니티 내에서 압축된 이미지 사용불가)

Unsupported texture format - Texture2D::EncodeTo functions do not support compressed texture formats.

테스트용으로 사진 하나를 임포트해서 업로드 해보려니까 해당오류가 떴다

유니티에서 power of two에 맞는 이미지는 자동으로 압축이되는데 

압축된이미지는 encoding이 적용이 안되는것이었다

압축을 풀고 사용하면된다.

 

반응형

댓글