在这篇文章中,我们将为您详细介绍如何使用Hashmap在FirebaseFirestoreAndroid中添加/更新/删除数组元素?商店数据库的内容。此外,我们还会涉及一些关于Androidfireb
在这篇文章中,我们将为您详细介绍如何使用Hashmap在Firebase Firestore Android中添加/更新/删除数组元素?商店数据库的内容。此外,我们还会涉及一些关于Android firebase firestore&functions pushNotification 使用 fcm 令牌错误、Android Firebase 身份验证、Cloud Firestore、Firebase 存储、注册个人资料图片用例的最佳实践?、android – Firebase Firestore – 或查询、android – Firebase分析事件未显示在firebase控制台上的知识,以帮助您更全面地了解这个主题。
本文目录一览:- 如何使用Hashmap在Firebase Firestore Android中添加/更新/删除数组元素?商店数据库
- Android firebase firestore&functions pushNotification 使用 fcm 令牌错误
- Android Firebase 身份验证、Cloud Firestore、Firebase 存储、注册个人资料图片用例的最佳实践?
- android – Firebase Firestore – 或查询
- android – Firebase分析事件未显示在firebase控制台上
如何使用Hashmap在Firebase Firestore Android中添加/更新/删除数组元素?商店数据库
我想收集一个用户,用户将有多个商店作为文档,每个文档都有storeName,storeAddress和字段availableProducts。我的问题是如何管理availableProducts数组?我知道Firestore无法处理数组,我应该使用HashMap。我的可用产品可能具有产品名称,产品价格等字段。我是Firebase的新手,如何availableProduct在Android Studio中使用Java管理数组?
答案1
小编典典编辑:2018年9月12日
从开始August 28, 2018,现在可以更新数组成员。更多信息在这里。
如何在Firebase Firestore中添加/更新/删除数组元素?
简短的答案是您不能!如关于数组的官方文档中所示:
尽管Cloud Firestore
可以存储阵列,但可以it does not support查询阵列成员或更新单个阵列元素。
因此,当前无法在Cloud Firestore
数据库中添加,更新或删除单个数组元素。
看您的数据库架构,我可以说您没有任何数组。availableProducts
是一个对象,它下面有一个名为地图0,其保持两个String属性,spName和spPrice。如果要更新,假设价格,请使用以下代码:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();DocumentReference ref = rootRef.collection("gdgsghs.cok").document("Shsheg");Map<String, Object> availableProducts = new HashMap<>();Map<String, Object> zeroMap = new HashMap<>();Map<String, Object> product = new HashMap<>();product.put("spPrice", 63.121);zeroMap.put("0", product);availableProducts.put("availableProducts", zeroMap);ref.set(availableProducts, SetOptions.merge());
您的价格将从更新67.368为63.121。
答案2
小编典典好消息,随着数组的最新改进,您可以添加,更新和删除数组元素。
查看此博客文章:Cloud Firestore中的更好的阵列!
你可以这样
//Map to add user to arrayfinal Map<String, Object> addUserToArrayMap = new HashMap<>();addUserToArrayMap.put("arrayOfUsers", FieldValue.arrayUnion(mAuth.getCurrentUser().getUid()));//Map to remove user from arrayfinal Map<String, Object> removeUserFromArrayMap = new HashMap<>();removeUserFromArrayMap.put("arrayOfUsers", FieldValue.arrayRemove(mAuth.getCurrentUser().getUid()));//use either maps to add or remove userdb.collection("REFERENCE").document("mDocumentId") .update(addUserToArrayMap);
Android firebase firestore&functions pushNotification 使用 fcm 令牌错误
如何解决Android firebase firestore&functions pushNotification 使用 fcm 令牌错误?
升级项目后,我一整天都在研究 firebase 功能, 我想要的是将通知推送到 firestore 文档用户的令牌,
这是我的数据库结构
EX:当集合Visitor doc改变时,推送消息到doc里面的token
exports.vsUp = functions.firestore.document("Visitor/{docId}").onUpdate(
(snapshot,context) => {
admin.firestore().collection("Visitor/{docId}/{token}/{docId}").get().then(
result => {
var registrationTokens = [];
result.docs.forEach(
tokenDocument => {
registrationTokens.push(tokenDocument.data().token);
}
);
admin.messaging().sendMulticast({
tokens: registrationTokens,notification: {
title: snapshot.data().visitor_name,body: snapshot.data().visitor_status
}
})
}
)
}
这是我现在的functions.js代码,但它不起作用,
怎样才能实现我想做的事? 谢谢>3
解决方法
这条线不起作用:
signer
此处的 admin.firestore().collection("Visitor/{docId}/{token}/{docId}").get()
位仅被解释为文字字符串。由于没有具有该名称的集合/文档,因此您不会得到任何结果。
如果您想为请求中指定的用户加载所有令牌,它看起来像这样:
{token}
所以你可以看到:
- 这使用
admin.firestore().collection(`Visitor/${context.params.docId}/token`).get()
来标记字符串,以便 JavaScript 将其解释为模板。您无需在第一行执行此操作,因为在您部署 Cloud Function 时 Firebase 本身会对其进行解释。 - 路径现在由三部分组成,因此它指向一个集合,而不是代码中的四部分,这意味着它指向一个文档。
- 我们使用
`
来获取触发 Cloud Function 的${context.params.docId}
的值。
请注意,消息未传送到设备的原因可能有很多,但这些绝对是您的代码未从 Firestore 读取任何内容的部分原因。
Android Firebase 身份验证、Cloud Firestore、Firebase 存储、注册个人资料图片用例的最佳实践?
如何解决Android Firebase 身份验证、Cloud Firestore、Firebase 存储、注册个人资料图片用例的最佳实践??
Android 上的基本用户登录/注册场景,使用 viewmodel 处理 LiveData。我使用 Firebase Auth 进行身份验证,使用 Cloud Firestore 用于 Cloud DB 和 Firebase Storage 用于存储图像。假设在注册期间用户提供了个人资料图片,我带来的工作流程是:(注册)
- firebaseAuth.createuserWithEmailAndPassword()
- 将图片保存到存储并获取下载地址
- 将用户数据放入 Cloud Firestore 数据库(以图片 url 作为字段)
- 更新 firebase 用户的 photoUrl 字段
- 使用登录用户更新 viewmodel
这些任务按此特定顺序依次执行,以实现对数据库的持久性。 一个任务(第一个任务除外)仅在前一个任务成功完成(使用 OnSuccessListener)后运行,如果其中任何一个任务失败,则删除 firebase 用户,并且 viewmodel 更新错误。 这个实现的问题是非常慢,因为每个任务都需要等待前一个任务完成,这会减慢注册实体的过程,但我认为这是必要的,以避免非持久性数据(例如,图像可能未加载但用户保存在云 Firestore 中,然后 viewmodel 更新,但没有图像导致空指针异常 ecc...)。所以我要问的是:有更好的方法来处理这个问题吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
android – Firebase Firestore – 或查询
collection("posts").whereEqualTo("blogId","1") .whereEqualTo("blogId",2).orderBy("timestamp",Query.Direction.DESCENDING).limit(50)
上面的代码不起作用:(
怎么做到这一点?
问候 :)
解决方法
WHERE blogId > 0 AND blogId < 3
试试这段代码:
collection("posts") .where("blogId",">","0") .where("blogId","<","3") .orderBy("timestamp",Query.Direction.DESCENDING) .limit(50)
android – Firebase分析事件未显示在firebase控制台上
在onCreateView()方法的每个片段中添加波纹管代码.
private void addFragmentInFirebaseAnalytics() { FirebaseAnalytics firebaseAnalytics = FirebaseAnalytics.getInstance(getContext()); FragmentItem fragmentItem = new FragmentItem(); fragmentItem.setFragmentId(Constant.FM_ID_MOIST_AIR); fragmentItem.setFragmentName(MoistAirActivity.class.getSimpleName()); Bundle bundle = new Bundle(); bundle.putInt(FirebaseAnalytics.Param.ITEM_ID,fragmentItem.getFragmentId()); bundle.putString(FirebaseAnalytics.Param.ITEM_NAME,fragmentItem.getFragmentName()); //Logs an app event. firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT,bundle); Log.d(TAG,"bundle >>"+bundle); }
使用的依赖是:
compile ''com.google.firebase:firebase-core:9.4.0''
用过的插件:
apply plugin: ''com.google.gms.google-services''
它的工作正常并在调试控制台中显示这样的日志,
09-14 12:30:42.967 D/FA ( 8821): Logging event (FE): select_content,Bundle [{_o=app,_ev=item_id,item_name=MoistAirActivity,content_type=Navigation Menu,_err=4}] 09-14 12:30:42.977 V/FA ( 8821): Using measurement service 09-14 12:30:42.977 V/FA ( 8821): Connecting to remote service 09-14 12:30:43.217 D/FA ( 8821): Connected to remote service 09-14 12:30:43.217 V/FA ( 8821): Processing queued up service tasks: 1 09-14 12:30:43.217 E/FA ( 8821): Task exception on worker thread: java.lang .IllegalStateException: FirebaseApp with name [DEFAULT] doesn''t exist. : com.goo gle.android.gms.measurement.internal.zzt.zzEd(UnkNown Source) 09-14 12:30:48.217 V/FA ( 8821): Inactivity,disconnecting from AppMeasurem entService
但是24小时后没有在调试控制台和firebase控制台中显示任何上传消息,
那么,这里有什么不对吗?请帮忙.
解决方法
参考:FirebaseApp with name [DEFAULT] doesn’t exist
关于如何使用Hashmap在Firebase Firestore Android中添加/更新/删除数组元素?商店数据库的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Android firebase firestore&functions pushNotification 使用 fcm 令牌错误、Android Firebase 身份验证、Cloud Firestore、Firebase 存储、注册个人资料图片用例的最佳实践?、android – Firebase Firestore – 或查询、android – Firebase分析事件未显示在firebase控制台上的相关知识,请在本站寻找。
本文标签: