Я занимаюсь разработкой игры Cocos2D-X, в которой я успешно интегрировал FireBase.
У меня проблема только на Android, на iOS работает нормально.
Это код:
auto storage = firebase::storage::Storage::GetInstance(firebase::App::GetInstance());
std::string stringPath = "users/" + currentId + "/image.png";
auto child = storage->GetReference().Child(stringPath.c_str());
//writtenPath is file:///data/user/0/app.game.Swipe/files/userImage.png
auto future = child.PutFile(writtenPath.c_str());
И я получаю следующий сбой:
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: jstring has wrong type: android.net.Uri$StringUri
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] in call to GetStringUTFChars
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] from void com.google.firebase.app.internal.cpp.JniResultCallback.nativeOnResult(java.lang.Object, boolean, int, java.lang.String, long, long)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] "main" prio=5 tid=1 Runnable
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] | group="main" sCount=0 dsCount=0 obj=0x750de730 self=0xf2105400
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] | sysTid=14484 nice=-4 cgrp=default sched=0/0 handle=0xf5730534
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] | state=R schedstat=( 0 0 0 ) utm=130 stm=25 core=1 HZ=100
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] | stack=0xff60d000-0xff60f000 stackSize=8MB
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] | held mutexes= "mutator lock"(shared held)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #00 pc 00350c69 /system/lib/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+128)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #01 pc 0033117d /system/lib/libart.so (_ZNK3art6Thread9DumpStackERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEbP12BacktraceMap+304)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #02 pc 0023996f /system/lib/libart.so (_ZN3art9JavaVMExt8JniAbortEPKcS2_+846)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #03 pc 00239ea7 /system/lib/libart.so (_ZN3art9JavaVMExt9JniAbortVEPKcS2_St9__va_list+58)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #04 pc 000ca603 /system/lib/libart.so (_ZN3art11ScopedCheck6AbortFEPKcz+42)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #05 pc 000c9ebb /system/lib/libart.so (_ZN3art11ScopedCheck13CheckInstanceERNS_18ScopedObjectAccessENS0_12InstanceKindEP8_jobjectb+566)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #06 pc 000c92a5 /system/lib/libart.so (_ZN3art11ScopedCheck22CheckPossibleHeapValueERNS_18ScopedObjectAccessEcNS_12JniValueTypeE+184)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #07 pc 000c86d9 /system/lib/libart.so (_ZN3art11ScopedCheck5CheckERNS_18ScopedObjectAccessEbPKcPNS_12JniValueTypeE+800)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #08 pc 000ceebf /system/lib/libart.so (_ZN3art8CheckJNI22GetStringCharsInternalEPKcP7_JNIEnvP8_jstringPhbb+490)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #09 pc 000c4a51 /system/lib/libart.so (_ZN3art8CheckJNI17GetStringUTFCharsEP7_JNIEnvP8_jstringPh+24)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #10 pc 0069252d /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (_ZN7_JNIEnv17GetStringUTFCharsEP8_jstringPh+10)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #11 pc 00692d97 /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (_ZN8firebase7storage8internal16MetadataInternal12download_urlEv+46)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #12 pc 00691abb /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (_ZNK8firebase7storage8Metadata12download_urlEv+8)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #13 pc 00625ddc /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (???)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #14 pc 00625e94 /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (???)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #15 pc 006a3f53 /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (_ZN8firebase26ReferenceCountedFutureImpl26ReleaseMutexAndRunCallbackEj+70)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #16 pc 00695b97 /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (_ZN8firebase7storage8internal24StorageReferenceInternal14FutureCallbackEP7_JNIEnvP8_jobjectbiPKcPv+1162)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #17 pc 0069f3c1 /data/app/app.game.Swipe-2/lib/arm/libMyGame.so (_ZN8firebase4util32JniResultCallback_nativeOnResultEP7_JNIEnvP8_jobjectS4_hiP8_jstringxx+100)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] native: #18 pc 00000ba9 /data/data/app.game.Swipe/code_cache/app_resources_lib.dex (Java_com_google_firebase_app_internal_cpp_JniResultCallback_nativeOnResult__Ljava_lang_Object_2ZILjava_lang_String_2JJ+172)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] at com.google.firebase.app.internal.cpp.JniResultCallback.nativeOnResult(Native method)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] at com.google.firebase.app.internal.cpp.JniResultCallback.onCompletion(JniResultCallback.java:196)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] - locked <0x0182127e> (a com.google.firebase.app.internal.cpp.JniResultCallback)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] at com.google.firebase.app.internal.cpp.JniResultCallback$TaskCallback.onSuccess(JniResultCallback.java:106)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] - locked <0x017873df> (a java.lang.Object)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] at com.google.firebase.storage.zzi.zzi(unavailable:-1)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] at com.google.firebase.storage.zzz.run(unavailable:-1)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] at android.os.Handler.handleCallback(Handler.java:751)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] at android.os.Handler.dispatchMessage(Handler.java:95)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] at android.os.Looper.loop(Looper.java:154)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] at android.app.ActivityThread.main(ActivityThread.java:6682)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] at java.lang.reflect.Method.invoke!(Native method)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
06-19 13:23:56.112 14484-14484/app.game.Swipe A/art: art/runtime/java_vm_ext.cc:470]
Я также попытался удалить «file: //» из начала строки, но затем я получил ошибку «файл не найден».
Также я попытался сделать то же самое с тем же путем к файлу (и изображению) и путем хранения, но с кодом Java, и это работает без каких-либо ошибок.
Любая помощь будет оценена.
ОБНОВИТЬ:
Кажется, что сбой происходит, когда я пытаюсь получить URL-адрес загрузки из данных результатов.
ОБНОВЛЕНИЕ 2:
Я говорил с командой Firebase, и кажется, что это внутренняя проблема. Мы нашли обходной обходной путь:
например: ./users/-Kn-X3qD8QuP9C9jIPkx/image.png -> ./users%2F-Kn-X3qD8QuP9C9jIPkx%2Fimage.png
./users%2F-Kn-X3qD8QuP9C9jIPkx%2Fimage.png?alt=media&маркер = downloadTokens
Задача ещё не решена.
Других решений пока нет …