如何为Firebase请求构建结构

问题描述 投票:0回答:1

简要信息:我正在开发Android测验应用程序。该数据库位于Firebase上,用户通过匿名方式登录。当用户打开应用程序时,它将自动登录。

我的问题是关于firebase。我无法为firebase请求构建智能。

当应用程序打开时; 1)应首先调用signInAnonymously(哪个firebase函数)。 2)然后我检查签名用户是否在firebase数据库上有一个保存点。 3)如果用户没有点,则生成它。 4)然后我发送请求以获得用户的意见。

在所有步骤中,我通过异步firebase方法向firebase发送请求。序列很重要,因为任何步骤的输出都可以作为下一步的输入。

我通过回调处理这个问题。但我不知道这是最好的方式。

screenshots of callbacks for these steps

你可以给我这些建议吗?如果我不使用回调,则由于异步firebase方法而出现问题。我打开这个问题的原因是未确定的问题。我可以学习并构建任何其他算法以使其更好。谢谢。

android firebase asynchronous callback firebase-authentication
1个回答
0
投票

看起来你正在使用嵌套回调,我不是Java程序员,但你可能想要自己轻松一点,而不是走那条路。

如果我匿名登录你的意思是一次性密码认证流程,比如只提供一个电话号码,那肯定是一个很好的方法。

您可以使用Google Cloud Functions,但这些功能必须使用Nodejs,Python或Go编写。

无论哪种方式,请看下面的流程:

  1. 用户请求OTP
  2. 确认请求
  3. 生成代码,保存后端代码(GCF)
  4. 文本用户代码
  5. 用户向您发送正确的代码
  6. 比较服务器上的代码
  7. 向用户发送某种令牌,或者当您说出“点”来识别它们时。

我相信Java确实支持JSON Web Tokens。

因此,在设置GCF项目之后,您将获得一些文件夹和文件,如下所示:

.firebaserc:一个隐藏文件,可以帮助您快速切换使用firebase的项目。

firebase.json:描述项目的属性。

functions/:此文件夹包含您的所有功能代码。

functions/package.json:描述云功能的NPM包文件。

functions/index.js:Cloud Functions代码的主要来源。

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;
    }
}

等等,无论如何,我希望那种能给你一个足够好的想法,让它让你前进。祝你好运。我知道我没有抽出时间来解释我的代码中的正则表达式是清理电话号码以及其他一些东西。再说一次,不要只是复制粘贴我提供的东西,研究它。

© www.soinside.com 2019 - 2024. All rights reserved.