Как получить данные из запроса, отправленного через вызываемую функцию HTTP? - PullRequest
1 голос
/ 14 июля 2020

Я использую Firebase Admin SDK для выполнения административных функций. Функции, которые я развернул, находятся в облачной функции Firebase в моей консоли. Мне удалось вызвать эти функции из приложения, однако я не знаю, как получить значения из сопоставленных данных, которые я отправил через вызов. Если я прав, его можно получить через переменную request, но когда я пробую что-то вроде request.email, например, это не кажется допустимым аргументом.

MainActivity. java

public Task<String> callCloudFunction() {
            FirebaseFunctions mFunctions = FirebaseFunctions.getInstance();
            Map<String, Object> data = new HashMap<>();
            data.put("email", "new@example.com");
            data.put("password", "changePassword");
            data.put("displayName", "Mike Example");
            data.put("trainerId", "Mike Example");
            data.put("photoURL", "NULL");

            return mFunctions
                    .getHttpsCallable("mkUser")
                    .call(data)
                    .continueWith(new Continuation<HttpsCallableResult, String>() {
                        @Override
                        public String then(@NonNull Task<HttpsCallableResult> task) {
                            // This continuation runs on either success or failure, but if the task
                            // has failed then getResult() will throw an Exception which will be
                            // propagated down.
                            return (String) task.getResult().getData();
                        }
                    });

    }

index.ts

export const mkUser = functions.https.onRequest((request, response) =>{

  admin.auth().createUser({
      email: request.email, //IS NOT A VALID ARGUMENT ('email' CANNOT BE FOUND)
      emailVerified: false,
      password: 'secretPassword',
      displayName: 'John Doe', //VALUES ARE HARDCODED BUT I WOULD LIKE TO USE 'Mike Example' SENT FROM MAIN ACTIVITY
      photoURL: 'http://www.example.com/12345678/photo.png',
      disabled: false
    })
      .then(function(userRecord: { uid: any; }) {
        // See the UserRecord reference doc for the contents of userRecord.
        console.log('Successfully created new user:', userRecord.uid);
      })
      .catch(function(error: any) {
        console.log('Error creating new user:', error);
      });
});

1 Ответ

0 голосов
/ 03 августа 2020

Итак, я выяснил, с какой проблемой столкнулся, и как ее решить.

Во-первых, внутри index.ts я использовал HTTP-функцию .onRequest, а если бы я изменил это до .onCall, затем код, который я использовал для вызова функции HTTP внутри MainActivity. java будет работать.

Использование .onCall изменяет полученную информацию с «запроса» на «данные»; затем его можно использовать для доступа к отображаемой информации, отправляемой через вызов в приложении.

index.ts

export const mkUser = functions.https.onCall(async (data, context) =>{
  try {
    const userRecord = await admin.auth().createUser({
      email: data.email,
      emailVerified: false,
      password: data.password,
      displayName: data.displayName,
      disabled: false
    })
    console.log('Successfully created new user:', userRecord.uid);
   } catch (error) {
    console.log('Error creating new user:', error);
    return "ERROR"
   }
});
...