código de erro função nuvem Firebase e mensagem de erro é sempre Interno sobre Android

Juan Carlos Durini:

Estou desenvolvendo um recurso para meu aplicativo, onde um usuário pode enviar uma notificação para outro usuário usando funções de nuvem. As minhas funções e as minhas notificações funcionam como esperado, mas eu não sou capaz de lidar com erros em um bom caminho, porque eu sempre obter "interno" como o erro no meu código do Android.

Aqui está o meu código para Android:

public static Task<String> callFirebaseFunction(HashMap<String, Object> data, String funcion){

    FirebaseFunctions mFunctions = FirebaseFunctions.getInstance();

    return mFunctions
        .getHttpsCallable(funcion)
        .call(data)
        .continueWith(new Continuation<HttpsCallableResult, String>() {
            @Override
            public String then(@NonNull Task<HttpsCallableResult> task) throws Exception {
                return (String) task.getResult().getData();
            }
        });
}

Aqui é onde eu chamo callFirebaseFunction

Utilities.callFirebaseFunction(dataNoty, nombreFuncion)
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
            if ( !task.isSuccessful() ){
                Exception e = task.getException();
                if (e instanceof FirebaseFunctionsException) {
                    FirebaseFunctionsException ffe = (FirebaseFunctionsException) e;
                    FirebaseFunctionsException.Code code = ffe.getCode(); // It's always INTERNAL
                    Object details = ffe.getMessage(); // It's always INTERNAL
                } else {
                    // handle error
                }
            } else {
                // success
            }
        }
    });

E aqui está o meu código para a minha função nuvem

exports.helloWorld = functions.https.onRequest((req, res) => {
    let data     = req.body.data;
    let id = data['id'].toString();
    db.collection('users').doc(id).get()
        .then((snapshot) => {
            let infoUser = snapshot.data();
            // Verifies data
            if ( typeof infoUser !== "undefined" && Object.keys(infoUser).length > 0 ){
                // Some code
            } else {
                throw new functions.https.HttpsError(
                    'invalid-argument',             // code
                    'Error',                        // message
                    'User ' + id + ' not found'     // details
                );
            }
        }).then( () => {
            console.log('Success');
            return res.status(200).send("success");
        }).catch( error => {
            res.status(500).send(error.details);
            return new functions.https.HttpsError(error.code, error.details);
        });
});

Eu tentei diferentes versões do código no meu segmento de captura, por exemplo:

.catch( error => {
    res.status(500).send('Error');
    throw new functions.https.HttpsError('invalid-argument', 'Error');
});

Eu não sei como é que eu vou fazer o meu segmento de captura, e eu realmente preciso para obter o erro eu jogar no nó (não apenas "interna").

Apenas Pessoa:

Funções que podem ser chamadas exigem o seguinte formato:

exports.yourFunction = functions.https.onCall((data, context) => {
  // ...
});

Não é a mesma coisa que um HTTP desencadeada Função nuvem , que é o que você está usando. Você ainda pode acessá-lo usando uma solicitação HTTP a partir de seu aplicativo Android, mas se você quer usar mFunctions.getHttpsCallable(function).call(data), você vai precisar usar uma função mobilizável Nuvem, que eu ligada acima.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=183448&siteId=1
Recomendado
Clasificación