Estoy creando una aplicación para iOS usando Firebase para el backend y necesito usar Firebase Callable Cloud Functions. Tengo todo configurado según los documentos y las funciones se activan y se comportan como se esperaba cuando se inician desde el navegador o curl, pero no puedo hacer que se activen desde mi aplicación.
Configuré una aplicación de prueba solo usando las funciones y tampoco puedo hacer que se active desde la aplicación iOS. Ni siquiera un hola mundo básico. No pasa nada.
Se ha hecho todo lo siguiente:
Lado de base de fuego:
Lado iOS:
Y no obtengo nada... la declaración de impresión en el botón funciona, pero la función no se activa y no se registra nada en los registros de Firebase.
¿Qué me estoy perdiendo o haciendo mal aquí?
Intenté un nuevo proyecto con una nueva instancia de Firebase. Copié el código directamente de los ejemplos en los documentos de Firebase y seguí todo paso a paso
CÓDIGO DE BASE DE FUEGO
const functions = require('firebase-functions'); const admin = require('firebase-admin') exports.helloWorld = functions.https.onCall((data, context) => { const text = data.text; console.log("Text: " + text); const uid = context.uid; console.log("UID: " + uid); const name = context.name; console.log("Name: " + name); console.log('Hello world fucking worked baby!'); return { message: text } });CÓDIGO SWIFT
import UIKit import FirebaseFunctions class ViewController: UIViewController { lazy var functions = Functions.functions() override func viewDidLoad() { super.viewDidLoad() } @IBAction func fireFunction(_ sender: Any) { print("Button Fire") let data = ["text": "hello!"] functions.httpsCallable("helloWorld").call(data) { (result, error) in print("Function returned") if let err = error { print(err) } if let res = result { print(res) } } } }Parece que la Google Cloud Function correctamente si se llama desde un navegador. También puede ver los LOG de Cloud Function. Simplemente vaya a la página de Cloud Functions y haga clic en su función. Haga clic en el botón VIEW LOGS e intente llamar a la URL nuevamente, si hay un error con la forma en que Swift lo llama, se registrará allí.
No he trabajado mucho con iOS Swift, pero dado que está intentando llamar a la función a través de Internet, creo que es posible que deba otorgar permisos a la aplicación para acceder a Internet. Parece que la llamada nunca se inicia en Cloud Function, por eso no se activa.
Supongo que la función de la nube es una función activada por HTTP. Por lo tanto, como solución alternativa, puede llamar a la función iniciando una solicitud HTTP desde la aplicación. Nuevamente, esto no funcionará, a menos que se asegure de que su aplicación tenga los permisos para usar Internet.