首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebase云函数错误码和错误消息在Android上始终为内部

Firebase云函数错误码和错误消息在Android上始终为内部
EN

Stack Overflow用户
提问于 2018-08-07 07:07:00
回答 1查看 8.7K关注 0票数 4

我正在为我的应用程序开发一个功能,其中一个用户可以使用云功能向另一个用户发送通知。我的函数和通知按预期工作,但我不能以正确的方式处理错误,因为我总是在Android代码中得到“内部”错误。

以下是我的Android代码:

代码语言:javascript
复制
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();
            }
        });
}

这里是我调用callFirebaseFunction的地方

代码语言:javascript
复制
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
            }
        }
    });

下面是我的云函数的代码

代码语言:javascript
复制
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);
        });
});

我在catch片段中尝试了不同版本的代码,例如:

代码语言:javascript
复制
.catch( error => {
    res.status(500).send('Error');
    throw new functions.https.HttpsError('invalid-argument', 'Error');
});

我不知道我该如何做我的catch片段,我真的需要得到我在node中抛出的错误(不仅仅是“内部”)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-07 07:17:49

Callable functions需要以下格式:

代码语言:javascript
复制
exports.yourFunction = functions.https.onCall((data, context) => {
  // ...
});

它与您正在使用的HTTP triggered Cloud Function不是一回事。你仍然可以从你的安卓应用程序中使用HTTP请求来访问它,但是如果你想使用mFunctions.getHttpsCallable(function).call(data),你将需要使用一个可调用的云函数,我在上面链接了它。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51716737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档