Google Firebase and Unity(C#):无法从Bucket下载PNG



specs

Unity editor version:       2018.2.8f1
Firebase Unity SDK version: 5.5.0
Additional SDKs:            SimpleFirebaseUnity
Developing on:              Mac
Export Platform:            Android

问题

我正在设置一个系统来从存储中下载图片。我不是数据库专家,但我想尝试一下,只是为了了解它的完成方式。我发现Firebase对于将元数据存储在实时数据库中非常有用,即使对于像我这样的入门级程序员也易于接近。

问题是我正在尝试从存储中的文件夹下载.png文件,但是我无法设法找到该文件是否实际下载或在此过程中丢失。我没有在控制台上遇到任何错误,但是当我打开文件应在的文件夹时,它是空的。

代码

private SimpleFirebaseUnity.Firebase firebaseDatabase;
private FirebaseQueue firebaseQueue;
private FirebaseStorage firebaseStorage;
private StorageReference m_storage_ref;
// Setup refernece to database and storage
void SetupReferences()
{
    // Get a reference to the database service, using SimpleFirebase plugin
    firebaseDatabase = SimpleFirebaseUnity.Firebase.CreateNew(FIREBASE_LINK, FIREBASE_SECRET);
    // Get a reference to the storage service, using the default Firebase App
    firebaseStorage = FirebaseStorage.DefaultInstance;
    // Create a storage reference from our storage service
    m_storage_ref = firebaseStorage.GetReferenceFromUrl(STORAGE_LINK);
    // Create a queue, using SimpleFirebase
    firebaseQueue = new FirebaseQueue(true, 3, 1f);
}
// ...
IEnumerator DownloadImage(string address, string fileName)
{
    var local_path = Application.persistentDataPath + THUMBNAILS_PATH;
    var content_ref = m_storage_ref.Child(THUMBNAILS_PATH + fileName + ".png");
    content_ref.GetFileAsync(local_path).ContinueWith(task => {
        if (!task.IsFaulted && !task.IsCanceled)
        {
            Debug.Log("File downloaded.");
        }
    });
    yield return null;
}

可能有很多原因是为什么这对您不起作用,包括:

  • 安全规则未正确设置
  • 文件的途径不正确
  • 您正在错误的平台上测试它(firebase在编辑器中工作不佳)
  • 您的设备正在阻止连接
  • 等...

为了获取错误消息,您需要记录它们:

IEnumerator DownloadImage(string address, string fileName)
{
    var local_path = Application.persistentDataPath + THUMBNAILS_PATH;
    var content_ref = m_storage_ref.Child(THUMBNAILS_PATH + fileName + ".png");
    content_ref.GetFileAsync(local_path).ContinueWith(task => {
        if (!task.IsFaulted && !task.IsCanceled)
        {
            Debug.Log("File downloaded.");
        }
        else
        {
            Debug.Log(task.Exception.ToString());
        }
    });
    yield return null;
}

请记住在编辑器中对其进行测试。

最新更新