我目前正在编写一个Android应用程序。在我的应用中,用户可以评价一些对象。数据(对象和评级)应存储在Google Firebase中,尤其是Firestore中。
我已将我的应用与Firebase相关联,并实施com.google.android.gms.auth.api.signin
以获取当前用户的GoogleSignInAccount
。
我想将数据保存到数据库中,如:
SomeObject: | objectId | name |
ObjectRating: | ratingId | objectId | userId | rating |
我不确定的是,保存为userId的内容。 GoogleSignInAccount.getId()
的文档说:
重要提示:请勿使用此返回的Google ID将当前登录的用户与您的后端服务器进行通信。相反,发送一个ID令牌(requestIdToken(String)),可以在服务器上安全地验证;或者发送一个服务器验证代码(requestServerAuthCode(String)),它可以依次交换为id令牌。
所以我可能不应该使用它。但建议的IdToken
已签名,因此我认为每次调用该方法时都会有所不同。
大多数人所做的是在数据库中创建用户目录。但是从应用程序我想获得用户评级以及给定对象的所有用户的总体平均评级。所以我认为在多个用户表中拆分评级会使整体平均评级的计算变得复杂。
我的问题是:如何在不使用不安全getId()
的情况下将ObjectRating链接到用户,同时仍然可以通过objectId选择所有ObjectRating来计算平均评分?
答案 0 :(得分:2)
要获取用户的唯一标识符,您可以使用FirebaseAuth
获取FirebaseUser
对象:
FirebaseAuth.getInstance().getCurrentUser().getUid();
getUid()
方法:
返回用于在Firebase中唯一标识用户的字符串 项目的用户数据库。在Firebase中存储信息时使用它 数据库或存储,甚至在您自己的后端。
在致电getCurrentUser()
之前,您需要确保used the GoogleSignInAccount
to authenticate with Firebase,否则会返回null
。