Краткая информация: работаю над приложением-викториной для Android. База данных находится на Firebase, и пользователи входят в систему анонимно. Когда пользователь открывает приложение, он автоматически входит в систему.
У меня вопрос о firebase. Я не мог создать интеллект для запросов firebase.
Когда приложение открыто; 1) signInAnonymously (какая функция firebase) должна вызываться первой. 2) Затем я проверяю, есть ли у подписанного пользователя сохраненная точка или нет в базе данных firebase. 3) Если у пользователя нет точки, она генерируется. 4) Затем я отправляю запрос, чтобы понять пользователя.
На всех этапах я отправляю запрос в firebase с помощью асинхронных методов firebase. Последовательность важна, потому что результат любого шага может быть входом для следующего шага.
Я справляюсь с этим с помощью обратного вызова. Но я не знаю, что это лучший способ.
скриншоты обратных вызовов для этих шагов
Вы можете дать мне совет по этому поводу? Если я не использую обратные вызовы, проблемы возникают из-за асинхронных методов firebase. Причина, по которой я открываю этот вопрос, - неопределенные проблемы. Я могу изучить и построить любой другой алгоритм, чтобы сделать его лучше. Спасибо.
Похоже, вы используете вложенные обратные вызовы, а я не программист на Java, но вы можете расслабиться и не идти по этому пути.
Если я вхожу анонимно, вы имеете в виду процесс аутентификации с использованием одноразового пароля, например, просто предоставление номера телефона, это определенно будет хорошим подходом.
Вы можете использовать Google Cloud Functions, но функции должны быть написаны на Nodejs, Python или Go.
В любом случае взгляните на этот поток ниже:
Я действительно считаю, что Java поддерживает веб-токены JSON.
Итак, после вашего установочного проекта GCF вы получите такую папку и файлы:
.firebaserc: скрытый файл, который помогает быстро переключаться между проектами с использованием firebase.
firebase.json: описывает свойства вашего проекта.
functions/: эта папка содержит весь код для ваших функций.
functions/package.json: файл пакета NPM, описывающий ваши облачные функции.
functions/index.js: основной источник кода ваших облачных функций.
functions/node_modules/: папка, в которой установлены все ваши зависимости NPM.
Вы хотите импортировать необходимые модули и инициализировать приложение:
const admin = require("firebase-admin");
const functions = require("firebase-functions");
const serviceAccount = require("./service_account.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://my-project.firebaseio.com"
});
Этот service_account.json - это то, что вам нужно создать, а не библиотеку.
У него будет набор закрытых и открытых ключей, которые вы получите из консоли Firebase. Убедитесь, что вы также поместили этот файл в свои файлы .gitignore.
Поэтому я пропускаю здесь некоторые важные детали, которые вам нужно будет выяснить, чтобы перейти к вашему основному вопросу.
Во-первых, вам нужна идея пользователя, поэтому вам нужно создать пользователя внутри GCF, чтобы он сам по себе был функцией, и, как вы упомянули, Firebase является асинхронным, поэтому он будет выглядеть примерно так:
const admin = require("firebase-admin");
module.exports = function(req, res) {
// Verify the user provided a phone
if (!req.body.phone) {
return res.status(422).send({ error: "Bad Input" });
}
// Format the phone number to remove dashes and parens
const phone = String(req.body.phone).replace(/[^\d]/g, "");
// Create a new user account using that phone number
admin
.auth()
.createUser({ uid: phone })
.then(user => res.send(user))
.catch(err => res.status(422).send({ error: err }));
// Respond to user request saying account was made
};
Итак, приведенный выше код я взял из своего предыдущего проекта, за исключением того, что все это было на JavaScript. Для вас эта часть будет в частности, в JavaScript или Nodejs, поскольку, опять же, Nodejs, Go или Python - единственные языки, поддерживаемые GCF.
Таким образом, комментарии говорят сами за себя, но я чувствую себя обязанным объяснить, что первое, что я должен был решить, - это как передать информацию этой функции в запросе.
Для этого мне пришлось сослаться на объект req.body, как вы видите выше. req.body содержит все различные данные, которые были переданы этой функции, когда пользователь вызвал ее. Я не был уверен, знали ли вы об этом. Итак, прежде чем копировать и вставлять то, что я написал выше, сделайте res.send(req.body);. Так что ничего другого внутри этого module.exports = function(req, res) {}, кроме res.send(req.body);, так что вы можете получить хорошее представление о том, как все это работает.
Для каждой создаваемой функции вам необходимо запустить firebase deploy name-of-project.
После того, как вы почувствуете, что справились с этим и все работает успешно, вы можете создать свой проект Android Studio и добавить зависимость базы данных следующим образом:
compile 'com.google.firebase:firebase-database:10.2.1'
И тогда вы, вероятно, захотите создать свою модель пользователя, может быть, так:
public class User {
public String phone;
public User() {
// Default constructor required for calls to DataSnapshot.getValue(User.class)
}
public User(String phone) {
this.phone = phone;
}
}
И так далее, в любом случае, я надеюсь, что это даст вам достаточно хорошее представление, которое поможет вам двигаться дальше. Удачи. Я знаю, что мне не удалось найти тайм-аут, чтобы объяснить, что регулярное выражение в моем коде предназначено для очистки номера телефона и, возможно, некоторых других вещей. Итак, опять же, не просто копируйте то, что я предлагал, изучите это.
Пожалуйста, воздержитесь от использования скриншотов для кода, вы можете просто вставить сам код в свой пост.