#ios #swift #firebase #google-cloud-functions
#iOS #swift #firebase #google-cloud-функции
Вопрос:
Я пытаюсь вызвать облачную функцию из firebase, используя следующий код.
Клиентский код —
func checkUserStatus() {
let functions = Functions.functions(region: "us-central1")
let argument = [
"currentUser":
[
"email": "test@email.com",
"uid": "LP8R4yZroyMTj"
]
]
functions.httpsCallable("subscriptionStatus").call(argument) { (result, error) in
if error != nil {
print("FAILED")
print(error)
} else {
print("PASSED")
print(result)
}
}
}
Код облачной функции —
exports.subscriptionStatus = functions.https.onRequest(async (request: Request<RequestBody>, response) => {
const {
currentUser,
} = request.body
// Logic goes here
}
Но при ее запуске появляется следующая ошибка
Ошибка домена = com.firebase.functions Code= 3 «НЕДОПУСТИМЫЙ АРГУМЕНТ» userInfo={NSLocalizedDescription=НЕДОПУСТИМЫЙ АРГУМЕНТ}
Функция принимает параметр с именем CurrentUser, который дополнительно включает адрес электронной почты пользователя и uid. Любая информация будет высоко оценена по этому вопросу.
Комментарии:
1. Я думаю, что проблема в вашем словаре. Попробуйте передать просто ‘[«email»: «test@email.com «,»uid»: «LP8R4yZroyMTj»]’ и посмотрите, является ли ошибка постоянной.
2. Просто попробовал это и получил то же сообщение об ошибке.
3. О, я вижу проблему. Ваша облачная функция — это «onRequest». Это должна быть вызываемая функция, если вы собираетесь использовать ее таким образом. Вы можете найти дополнительную информацию в этих документах: firebase.google.com/docs/functions /…
4. О, есть ли способ вызвать функцию типа onRequest со стороны клиента?
5. Я считаю, что вам нужно вызвать функцию, вызвав http url:
https://us-central1-<project-id>.cloudfunctions.net/subscriptionStatus
Ответ №1:
Просто чтобы получить ответ на вопрос для тех, у кого еще есть подобная проблема.
Для вызова onRequest()
облачной функции вам необходимо использовать URL-адрес, по которому она развернута, т.е. https://us-central1-<project-id>.cloudfunctions.net/<function-name>?<var-name>=<var-value>
Если вы хотите вызвать его в клиентском приложении, используя call
, тогда вам нужно будет использовать onCall()
облачную функцию.
Firebase имеет одну из лучших документации по своим сервисам: https://firebase.google.com/docs/functions/get-started
Функции OnCall:
https://firebase.google.com/docs/functions/callable
Функции onRequest:
https://firebase.google.com/docs/functions/http-events
Комментарии:
1. Я просто следовал документации и смог вернуть результат с помощью вызова https.