Функция Firebase, получающая com.google.firebase.functions.FirebaseFunctionsException: ответ недействителен JSON объект - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь вызвать вызываемую функцию Firebase https, и в Android Studio появляется сообщение об ошибке: com.google.firebase.functions.FirebaseFunctionsException: Ответ недействителен JSON объект "

Вот мой код

файл index.ts

import * as functions from 'firebase-functions'
const admin = require('firebase-admin')
admin.initializeApp()


export { newUserSignUp } from './userCreated'
export { userDeleted } from './userDeleted'

//this is the function that the client is unable to call
exports.sendFeedback = functions.region('asia-east2').https.onCall((data, context) => {
if (!context.auth) {
  throw new functions.https.HttpsError(
    'unauthenticated', 
    'only authenticated users can add requests'
  )
}
if (data.text.length > 30) {
  throw new functions.https.HttpsError(
    'invalid-argument', 
    'request must be no more than 30 characters long'
  )
}
return admin.firestore().collection('Feedback').add({
  Feedback : data.text,
  uid: context.auth.uid
})
})

Вот код в моем файле активности .kt в Android Studio

private fun sendFeedbackViaCloudFunction() {
    // Create the arguments to the callable function.
    val data = hashMapOf(
        "text" to write_feedback_edit_text.toString(),
        "uid" to FirebaseAuth.getInstance().currentUser!!.uid
    )
    functions = FirebaseFunctions.getInstance()
    Timber.i("Calling the cloud function")
    functions
        .getHttpsCallable("sendFeedback")
        .call(data)
        .addOnFailureListener {
            //This is the line thats printing the error log statement
            Timber.i("Failed to invoke the sendFeedback function: $it")
        }
        .continueWith { task ->
            val result = task.result?.data as String
            result
        }
}

Заявление об ошибке выкинуло Android Studio: com.google.firebase.functions.FirebaseFunctionsException: недопустимый ответ JSON объект.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Хорошо, я решил это, так что в основном я получал "ответ недействителен JSON ошибка объекта" неоднократно, даже после того, как я установил обещание вернуть действительный JSON в моем файле index.ts.

Так что, очевидно, если клиент вызывает функцию, клиенту также необходимо указать область сервера , если по умолчанию us-central1 не является предпочтительным расположением сервера. Поэтому я указал «asia-east2» как свое предпочтение на стороне сервера, но не на стороне клиента.

Как только я добавил нижнюю строку на стороне клиента, она теперь отлично работает

functions = FirebaseFunctions.getInstance("asia-east2")
0 голосов
/ 09 апреля 2020

Вам нужно будет изменить то, что вы отправляете клиенту. add () возвращает обещание, которое разрешается в DocumentReference. Этот объект DocumentReference слишком сложен для автоматического преобразования в JSON ответ. Мне непонятно, что вы на самом деле хотите, чтобы клиент получил, но вместо этого вам придется возвращать другое обещание со значением для отправки, возможно, в цепочке от обещания, возвращаемого add().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...