Я пытаюсь добавить регистрацию пользователя в свое приложение для Android. Когда пользователь создается, система сначала регистрирует его с помощью firebase, а в случае успеха сохраняет копию в базе данных.
Вот так выглядят мои функции https.onCall:
export const reg = https.onCall((data, context) =>
admin.auth().createUser({
uid: data.uid,
email: data.email,
emailVerified: false,
phoneNumber: data.phone,
password: data.phone.substr(-8),
displayName: data.name,
photoURL: "http://www.example.com/default.png",
disabled: false
}).then(user => claims.set(user.uid, data.role)).catch(error => ({ok: false, error})));
Когда я делаю запрос, используя код из Документов, например:
private fun addUser(name: String, email: String, phone: String, role: String): Task<String> {
// Create the arguments to the callable function.
val data = hashMapOf(
"name" to name,
"email" to email,
"phone" to phone,
"role" to role
)
return functions
.getHttpsCallable("reg")
.call(data)
.continueWith { task ->
val result = task.result?.data as String
Log.d("HttpsCallableResult", result)
result
}
}
Я получаю
{ok=false, error={codePrefix=auth, errorInfo={code=auth/uid-already-exists, message=The user with the provided uid already exists.}}}
Итак, используя класс данных Gson и kotlin, у меня есть
object Reg {
data class Result(val ok: Boolean, val role: String)
data class Err(val codePrefix: String)
data class ErrorInfo(val code: String, val message: String)
}
и теперь, когда я регистрирую результат, используя
val json = Gson().fromJson(res, Reg.Result::class.java)
Log.d("HttpsCallableResult", json)
Я получаю это исключение:
2019-01-07 10:44:51.641 13165-13165/com.modenu.tp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.modenu.tp, PID: 13165
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 57 path $.error..
at com.google.gson.Gson.fromJson(Gson.java:942)
at com.google.gson.Gson.fromJson(Gson.java:892)
at com.google.gson.Gson.fromJson(Gson.java:841)
at com.google.gson.Gson.fromJson(Gson.java:813)
at com.modenu.tp.ui.account.admin.AdminActivity$addUser$1.onComplete(AdminActivity.kt:138)
at com.google.android.gms.tasks.zzj.run(Unknown Source:4)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 57 path $.error..
at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1568)
at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:491)
at com.google.gson.stream.JsonReader.skipValue(JsonReader.java:1232)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)
at com.google.gson.Gson.fromJson(Gson.java:927)
at com.google.gson.Gson.fromJson(Gson.java:892)
at com.google.gson.Gson.fromJson(Gson.java:841)
at com.google.gson.Gson.fromJson(Gson.java:813)
at com.modenu.tp.ui.account.admin.AdminActivity$addUser$1.onComplete(AdminActivity.kt:138)
at com.google.android.gms.tasks.zzj.run(Unknown Source:4)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Здесь я использую Gson
, но любое работающее решение будет оценено.