从 iOS 应用程序调用时,Firebase 函数返回空值

Posted

技术标签:

【中文标题】从 iOS 应用程序调用时,Firebase 函数返回空值【英文标题】:Firebase function returning null value when called from iOS app 【发布时间】:2020-08-10 14:11:14 【问题描述】:

我正在从我的 ios 应用程序调用一个可调用的 firebase 函数,并得到一个 null 的返回值。几天前才返回正确的值,但现在它总是返回 null。数据在返回行之前的控制台中正确记录,并且在 iOS 调用中没有出现错误。

exports.startPlaylist = functions.https.onCall((data, context) => 
    const uid = context.auth.uid;
    const signature = data.signature;

    return axios.post('---url----', 
        data: signature
    ).then(function(response) 
        const val = response.data;

        const ref = database.ref().push();
        ref.set(
            host: 
                uid: uid
            ,
            users: 
               uid: uid
            ,
            books: val
         , function(error) 
            if(error) 
                console.log('Not set');
             else 
                const info =  id: ref.key ;
                console.log(info) //Correct log value appears in console
                return info;      //Return null, however
            
        );
    ).catch(function(err) 
        console.log(err);
    );
 );

Firebase 调用

Functions.functions().httpsCallable("startPlaylist").call(["signature": signature])  (result, error) in
        guard let result = result, error == nil else  return 
        print(result.data) //<-- prints "null"
 

【问题讨论】:

你的代码应该使用set()返回的promise来制定响应,而不是你传递给它的错误回调。 我认为print(response.data) 应该是print(result.data) 对吗? @bsod 是的,转换为堆栈时出现拼写错误。结果仍然为空,并且通过了最初的保护声明 【参考方案1】:

如上所述,您应该使用 set 返回的承诺:

            ref.set(
                host: 
                    uid: uid
                ,
                users: 
                   uid: uid
                ,
                books: val
             ).then(function() 
                const info =  id: ref.key ;
                console.log(info)
                return info;
             )
             .catch(function(error) 
                  console.log('Not set');
             );

【讨论】:

以上是关于从 iOS 应用程序调用时,Firebase 函数返回空值的主要内容,如果未能解决你的问题,请参考以下文章

从 Firebase 云函数调用时,OAuth2 访问令牌交换失败

通过 Firebase 从 Android 调用云函数

从 Flutter 应用程序连接到本地 Firebase 函数模拟器时出错

从firebase调用数据需要完成处理程序?

应用程序:openURL:选项:从 Firebase 动态链接安装应用程序后首次打开应用程序时未调用

在 Firebase Cloud Messaging 上订阅数百个主题时,iOS 应用程序崩溃