Функция Flutter Firebase Cloud не может быть вызвана - PullRequest
1 голос
/ 06 апреля 2020

Я получаю сообщение об ошибке при использовании облачных функций Firebase при попытке вызвать вызываемую функцию из Flutter.

flutter: caught generic exception
flutter: PlatformException(functionsError, Firebase function failed with exception., {message: NOT FOUND, code: NOT_FOUND})

Вот как я пытаюсь вызвать облачную функцию с помощью cloud_functions: ^ 0.4. 2 + 3

import 'package:cloud_functions/cloud_functions.dart';
      _check(String id) async {
        HttpsCallable callable = CloudFunctions.instance
            .getHttpsCallable(functionName: 'checkUserFavorites');
        try {
          final HttpsCallableResult result = await callable.call(
            <String, dynamic>{
              'id': id,
            },
          );
          print(result.data);
        } on CloudFunctionsException catch (e) {
          print('caught firebase functions exception');
          print(e.code);
          print(e.message);
          print(e.details);
        } catch (e) {
          print('caught generic exception');
          print(e);
        }
      }

Ответы [ 2 ]

2 голосов
/ 20 апреля 2020

У меня были похожие проблемы, и после нескольких дней отладки и экспериментов я нашел решение только после изучения исходного кода Плагина Cloud Functions для Flutter .

При развертывании функции Firebase Cloud вы можете выбрать любую область предпочтений (чем ближе к вашему приложению, тем лучше). Например,

// using DigitalOcean spaces
exports.generateCloudImageUrl = functions
    .region('europe-west3')
    .https.onCall((reqData, context) => {
...
}

Если вы хотите вызвать эту функцию из приложения Flutter, вы должны указать регион, в противном случае все переходит к us-central1, что по умолчанию. См. Пример кода о том, как использовать функцию, развернутую в указанном c регионе

final HttpsCallable generateCloudImageUrl = new CloudFunctions(region: "europe-west3")
      .getHttpsCallable(functionName: 'generateCloudImageUrl');

// NB! if you initialize with 'CloudFunctions.instance' then this uses 'us-central1' as default region! 

, см. cloud_function source для init.

1 голос
/ 06 апреля 2020

Облачные функции поддерживаются в регионах, в которых вы в настоящее время их выполняете, в соответствии с Документация по расположению облачных функций , но не во всех регионах.

В зависимости от того, что вы указали в комментарии, я бы сказал, что есть 3 кило ios к вашей проблеме:

  • europe-west1: функция, вероятно, устарела, так как вы получаете непредвиденную ошибку формата данных , что говорит о том, что он ожидает данные / формат, отличный от используемой по умолчанию функции.

  • europe-west2: функция не развернута в этом регионе, это указывается в сообщении об ошибке message: NOT FOUND .

  • Функция по умолчанию (неизвестный регион): это самая последняя версия функции для региона, отличного от europe-west1 и europe-west2, и она принимает вызов с данные в формате, который вы отправляете.

ПРИМЕЧАНИЕ : Вы можете проверить, в каких регионах ваша облачная функция развернута в данный момент на панели мониторинга облачных функций, как вы можете видеть на приведенном ниже примере изображения:

enter image description here

Кроме того, я подозреваю, что используемый вами регион по умолчанию - us-central1, поскольку согласно документации:

By По умолчанию функции выполняются в us-central1 регионе

. Чтобы исправить эту проблему, я предлагаю вам повторно развернуть текущую версию функции в регионах Европа-Запад, которые вы собираетесь использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...