1
votes

La fonction Firebase .onCall Cloud n'est pas appelée depuis le projet Swift Xcode

J'ai ajouté une application iOS à un projet Firebase et pour une raison quelconque, la fonction n'est pas appelée lorsque je l'appelle depuis iOS. La connexion à Firebase semble être correcte car je peux exécuter des requêtes sur la base de données Firebase à partir du projet swift, mais lorsque j'exécute la fonction cloud swift, il semble contourner le code. pour enquêter sur ceci:

lazy var functions = Functions.functions()

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    FirebaseApp.configure()

    functions.httpsCallable("testFunction").call("Hi", completion: {(result,error) in
        if let error = error{
            print("An error occurred while calling the test function: \(error)" )
        }
        print("Results from test cloud function: \(result)")
    })

    return true
}

Et voici le code rapide que j'utilise pour appeler la fonction,

  exports.testFunction = functions.https.onCall((data,context) => {
      console.log("hi the test function worked");
      return "hi the test function worked";
  })

I ' J'ai essayé de mettre à jour les cabosses de cacao et de créer de nouveaux projets mais rien ne semble fonctionner. Il n'y a rien qui soit renvoyé à mon projet iOS ou enregistré dans la console Firebase. Il n'y a pas d'erreurs, est-ce que quelqu'un a des idées sur ce qui pourrait causer un événement aussi étrange? Merci.


2 commentaires

As-tu trouvé une solution, je suis coincé


@yusuftezel Non, j'ai déposé un rapport de bogue avec Firebase, mais il s'est résolu tout seul. Il semble qu'il y ait eu une sorte de problème ou de crash de la base de feu, car il a juste repris automatiquement 10 heures plus tard sans changer une seule ligne de code.


3 Réponses :


0
votes

Puisque vous utilisez une méthode asynchrone, vous quittez votre bloc de méthodes avant que la requête réseau ne soit terminée. Cela peut entraîner la fermeture de la connexion au serveur avant que vous ne receviez une demande de retour.

Personnellement, je ne ferais aucune requête réseau dans appDelegate, mais dans votre premier viewController viewDidLoad pour tester quoi que ce soit.


1 commentaires

Merci pour votre réponse J'ai essayé de déplacer la fonction comme vous l'avez suggéré vers le viewDidLoad () du premier ViewController appelé et toujours rien ne s'est produit. Je soupçonne que le problème peut avoir quelque chose à voir avec Firebase.



1
votes

J'ai rencontré le même problème hier. Le symptôme que j'ai vu est exactement le même que le vôtre. J'ai réussi à le faire fonctionner en rétrogradant mes versions de pod Firebase, car j'ai déjà utilisé des fonctions cloud et elles fonctionnent.

Mes versions de pod pour Firebase / Core, Firebase / Functions, Firebase / Messaging étaient toutes 5.15.0 et elles ne fonctionnaient pas.

Je les ai changés en 5.7.0 et maintenant ils fonctionnent comme prévu.

Je n'ai pas essayé les versions intermédiaires.

Mettre à jour: Le problème semble être résolu dans la version 5.18.0 qui est sortie aujourd'hui.


2 commentaires

C'est un événement très étrange que le problème vient de résoudre pour moi en un jour sans changer une seule ligne de code. J'ai remarqué tout au long de mon utilisation de Firebase que ces types d'incidents se produisaient plus fréquemment sans aucun préavis. Espérons que plus nous déposons de rapports de bogues, plus tôt ils trouveront ce qui cause ce problème.


Oui, après avoir lu votre commentaire, j'ai attendu toute la nuit mais le problème n'a pas disparu, j'ai donc opté pour la réponse que j'ai écrite. Google est assez doué pour résoudre les problèmes, alors espérons qu'ils le feront.



0
votes

Rencontrer le même problème et tester tous les scénarios mentionnés, mais après un long délai d'attente, l'erreur était toujours la même.

Basculement de la connexion réseau de "USB-MAC-PHONE partagé" à Phone 4G. Et l'appel est réussi.

Je n'ai pas le temps de tester davantage pour le moment, je viens de remarquer que le problème se reproduit également sur les simulateurs.


0 commentaires