Swift, функция Firebase Cloud — ошибка НЕДОПУСТИМОГО АРГУМЕНТА

#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.