菜鸟教程小白 发表于 2022-12-12 14:39:22

ios - 从 firebase 可调用函数接收返回的数据


                                            <p><p>我正在使用 iOS 中的 Callable HTTPS 函数。我已经创建并部署了以下函数:</p>

<pre><code>export const generateLoginToken = functions.https.onCall((data, context) =&gt; {

    const uid = data.user_id
    if (!(typeof uid === &#39;string&#39;) || uid.length === 0) {
      throw new functions.https.HttpsError(&#39;invalid-argument&#39;, &#39;The function must be called with one argument &#34;user_id&#34; &#39;);
    }

    admin.auth().createCustomToken(uid)
    .then((token) =&gt; {
      console.log(&#34;Did create custom token:&#34;, token)
      return { text: &#34;some_data&#34; };
    }).catch((error) =&gt; {
      console.log(&#34;Error creating custom token:&#34;, error)
      throw new functions.https.HttpsError(&#39;internal&#39;, &#39;createCustomToken(uid) has failed for some reason&#39;)
    })
})
</code></pre>

<p>然后我从我的 iOS 应用程序中调用该函数,如下所示:</p>

<pre><code>let callParameters = [&#34;user_id&#34;: userId]
    self?.functions.httpsCallable(&#34;generateLoginToken&#34;).call(callParameters) { (result, error) in
    if let localError = self?.makeCallableFunctionError(error) {
      single(SingleEvent.error(localError))
    } else {
      print(&#34;Result&#34;, result)
      print(&#34;data&#34;, result?.data)
      if let text = (result?.data as? )?[&#34;text&#34;] as? String {
            single(SingleEvent.success(text))
      } else {
            let error = NSError.init(domain: &#34;CallableFunctionError&#34;, code: 3, userInfo: [&#34;info&#34;: &#34;didn&#39;t find custom access token in the returned result&#34;])
            single(SingleEvent.error(error))
      }
    }
}
</code></pre>

<p>我可以在日志中看到在服务器上使用正确的参数调用了该函数,但我似乎无法获取从该函数返回到应用程序的数据。似乎 <code>result.data</code> 值是 <code>nil</code> 出于某种原因,即使我 <code>return {text: "some_data"}</code> 从云函数. <strong>怎么会?</strong></p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>哎呀!问题是我忘记从云函数返回实际的 promise 。此功能有效:</p>

<pre><code>export const generateLoginToken = functions.https.onCall((data, context) =&gt; {

    const uid = data.user_id
    if (!(typeof uid === &#39;string&#39;) || uid.length === 0) {
      throw new functions.https.HttpsError(&#39;invalid-argument&#39;, &#39;The function must be called with one argument &#34;user_id&#34; &#39;);
    }

    return admin.auth().createCustomToken(uid)
    .then((token) =&gt; {
      console.log(&#34;Did create custom token:&#34;, token)
      return { text: &#34;some_data&#34; };
    }).catch((error) =&gt; {
      console.log(&#34;Error creating custom token:&#34;, error)
      throw new functions.https.HttpsError(&#39;internal&#39;, &#39;createCustomToken(uid) has failed for some reason&#39;)
    })
})
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 从 firebase 可调用函数接收返回的数据,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/50003622/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/50003622/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 从 firebase 可调用函数接收返回的数据