Firebase HTTPs Callable iOS Swift - PullRequest
       20

Firebase HTTPs Callable iOS Swift

0 голосов
/ 03 июля 2018

Я создал работающую облачную функцию, используя Firebase, в которой работает мой браузер. Теперь я работаю со своим кодом iOS Swift и успешно установил все зависимости.

Тем не менее, я новичок в iOS / Swift и пытаюсь выяснить, где вызывать URL из облачной функции? Вот код, который Firebase предоставляет для вызова из приложения iOS:

  functions.httpsCallable("addMessage").call(["text": "test"]) { (result, error) in
  if let error = error as NSError? {
    if error.domain == FunctionsErrorDomain {
      let code = FunctionsErrorCode(rawValue: error.code)
      let message = error.localizedDescription
      let details = error.userInfo[FunctionsErrorDetailsKey]
    }
    // ...
  }
  if let text = (result?.data as? [String: Any])?["text"] as? String {
    print(text)  // WOULD EXPECT A PRINT OF THE CALLABLE FUNCTION HERE
  }
}

Вот вызываемая функция облака (которая развернута):

    exports.addMessage = functions.https.onCall((data, context) => {
const text = data.text;
return {
    firstNumber: 1,
    secondNumber: 2,
    operator: '+',
    operationResult: 1 + 2,
  };
  });

На данный момент я не вижу ничего напечатанного в моей консоли XCode, ожидаю вызываемой функции. Спасибо!

Ответы [ 4 ]

0 голосов
/ 05 мая 2019

вместо (result?.data as? [String: Any])?["text"] as? String используйте result?.data

наконец-то это выглядит примерно так

if let text = (result?.data) {
    print(text)  // WOULD EXPECT A PRINT OF THE CALLABLE FUNCTION HERE
}
0 голосов
/ 05 июля 2018

Я понял о проблеме. Мне пришлось обновить клавишу возврата в облачной функции, чтобы она соответствовала моей функции Swift. Вот код TypeScript:

exports.addMessage = functions.https.onCall((data, context) => {
const text = data.text;
console.log(text)

return {
    text: "100"
  };
0 голосов
/ 03 января 2019

Надеюсь, это работает. Обязательно добавьте текстовый элемент в возвращаемую часть вызываемой облачной функции, например:

    exports.addMessage = functions.https.onCall((data, 
    context) => {
    const text = data.text;
    return {
    text: text
    firstNumber: 1,
    secondNumber: 2,
    operator: '+',
    operationResult: 1 + 2,
  };
  });

В вашем коде вы возвращаете переменные, которые вы не используете, такие как 'firstNumber', 'secondNumber', 'operator' и 'operationResult', и вы забыли добавить важную переменную, которая ' текст».

0 голосов
/ 03 июля 2018

Похоже, вы используете функцию HTTP-запроса Cloud. HTTP-функции облачных функций s - это не то же самое, что HTTP-запрос облачных функций .

Обратите внимание на сигнатуру вызываемого облака HTTP. Функции:

exports.addMessage = functions.https.onCall((data, context) => {
  // ...
});

против HTTP-запроса Облачные функции:

exports.date = functions.https.onRequest((req, res) => {
  // ...
});

Если вы используете onRequest, вам нужно будет сделать HTTP-запрос от клиента. Если вы используете вызываемую функцию, вы просто передаете имя функции и данные, как показано в примере. Судя по ссылке, которую вы показали, это будет что-то вроде

  functions.httpsCallable("testFunction").call(["foo": "bar"]) { (result, error) in
//...
}
...