Вопросы по тегу: firebase-realtime-database

(12)

Что будет эквивалентно базе данных Firebase Realtime в AWS?

В данный момент я работаю над новым игровым проектом, который будет состоять из внешнего интерфейса React Native и внутреннего интерфейса на основе Lambda. Приложению требуются некоторые функции реального времени, такие как активные записи пользователей, геозоны и т. д.Я смотрел на Firebase Realtime Database, которая выглядит как действительно элегантное решение для синхронизации данных в реальном времени, но я не думаю, что у AWS есть что-то подобное.Я могу придумать 3 варианта «бессерверного» режима реального времени с использованием только сервисов AWS:Вариант 1: Обмен сообщениями AWS IoT через WebSocketsЭто вполне очевидно: управляемое соединение WebSockets через IoT SDK. Я подумывал запускать Lambdas в ответ на входящие и исходящие события и просто использовать WebSockets в качестве уровня реального времени, создавая настраиваемую логику обработки в клиенте приложения, как обычно.Недостатком этого, по крайней мере, по сравнению с Firebase, является то, что мне придется самостоятельно обрабатывать данные в событиях, что добавит еще один уровень управления поверх WebSockets и должен быть стандартизирован с уровнем данных API в магазины приложения.Плюсы: Масштабируемое двунаправленное соединение в реальном времени Минусы: Работает только при открытом приложении Необходима реализация структуры сообщения Несколько транспортных уровней для управления Вариант 2: повторная выборка по нажатиюЕще один вариант — использовать push-уведомления в качестве триггеров в реальном времени, но использовать обычный HTTP-запрос к шлюзу API для фактического получения обновленной полезной нагрузки.Мне нравится этот подход, потому что он использует только один транспортный уровень и единственный источник достоверной информации о состоянии приложения. Это также будет запускать обновления, когда приложение не открыто, поскольку это push-уведомления.Недостаток в том, что это требует большого количества пользовательской работы с потенциально сложными сопоставлениями между push-уведомлениями и данными, которые необходимо получить.Плюсы: Push-уведомления работают, даже когда приложение закрыто Единый источник достоверности, транспортный уровень Минусы: Самое индивидуальное решение В целом потребуется гораздо больше HTTP-запросов Вариант 3: Cognito Sync Это новее для меня, и я не уверен, что с ним можно взаимодействовать с сервером.Cognito Sync предлагает синхронизацию состояния пользователя. на разных устройствах с автономной поддержкой и является частью Cognito SDK, который я буду использовать в любом случае. Похоже, это именно то, что я ищу, но я не смог найти убедительных доказательств того, можно ли модифицировать или «инициировать» обновления с AWS, а не только с одного из устройств.Плюсы: Предоставляет абстрактную модель данных в реальном времени Подключение к записям пользователей Cognito OOTB Минусы: Не уверен, что можно изменить или обновить из Lambdas Мне интересно, есть ли у кого-нибудь опыт работы в режиме реального времени на AWS в рамках архитектуры на основе Lambda, и есть ли у вас мнение о том, как лучше поступить?
B

BarakChamo

5 лет назад

Ответов: 6

Firebase В классе не найдено свойств для сериализации

Я заблокирован при создании базы данных Firebase.Я пытаюсь смоделировать класс. Очень простой класс:package com.glups.model; import com.google.firebase.database.IgnoreExtraProperties; @IgnoreExtraProperties public class AlumnoFB { private String nombre; private String apellidos; private String telefono; private String email; private Boolean tieneWhatsapp; private Boolean tieneTelegram; private Boolean tieneHangouts; private Long formaPago; private Double ratioHora; private Double precioHora; private Double horasCompensadas; public AlumnoFB() { // Default constructor required for calls to DataSnapshot.getValue(User.class) } public AlumnoFB(String nombre, String apellidos, String telefono, String email, Boolean tieneWhatsapp, Boolean tieneTelegram, Boolean tieneHangouts, Long formaPago, Double ratioHora, Double precioHora, Double horasCompensadas) { this.nombre = nombre; this.apellidos = apellidos; this.telefono = telefono; this.email = email; this.tieneWhatsapp = tieneWhatsapp; this.tieneTelegram = tieneTelegram; this.tieneHangouts = tieneHangouts; this.formaPago = formaPago; this.ratioHora = ratioHora; this.precioHora = precioHora; this.horasCompensadas = horasCompensadas; } } это почти как образец класса из Firebase.Пользователь приложения, полученный с помощью getUser(), зарегистрирован в Firebase.Когда я вызываю SetValue:AlumnoFB alumno = new AlumnoFB("", "", "", "", false, false, false, ((Integer)FormaPago.INT_NO_PAGADO).longValue(), 0.0, 0.0, 0.0); mDatabase.child("AlumnoFB").child(ControlClasesFirebase.getUser().getUid()).setValue(alumno) ; Возникло фатальное исключение.06-10 10:17:37.179 13841-13841/com.glups.controlclases E/AndroidRuntime: FATAL EXCEPTION: main Process: com.glups.controlclases, PID: 13841 com.google.firebase.database.DatabaseException: No properties to serialize found on class com.glups.model.AlumnoFB at com.google.android.gms.internal.zzaix$zza.(Unknown Source) at com.google.android.gms.internal.zzaix.zzj(Unknown Source) at com.google.android.gms.internal.zzaix.zzaw(Unknown Source) at com.google.android.gms.internal.zzaix.zzav(Unknown Source) at com.google.firebase.database.DatabaseReference.zza(Unknown Source) at com.google.firebase.database.DatabaseReference.setValue(Unknown Source) at com.glups.controlclases.MainActivity$4.onClick(MainActivity.java:305) at android.view.View.performClick(View.java:4780) at android.view.View$PerformClick.run(View.java:19866) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5258) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Я проверил типы, и все они принимаются. Что не так?
E

EulerVen

6 лет назад

Ответов: 12

Ошибка: приложение Firebase "[ПО УМОЛЧАНИЮ]" не создано - вызовите Firebase App.initializeApp ()

У меня есть база данных firebase, связанная с двумя приложениями, одно из которых является приложением для iOS, а другое - веб-приложением, закодированным в node.js, который является базовым алгоритмом, который устанавливает данные в базу данных. Когда я запускаю алгоритм, я сталкиваюсь с- Ошибка: не создано приложение Firebase «[ПО УМОЛЧАНИЮ]» - вызовите Firebase. App.initializeApp (). при ошибке (родной) в R (/Users/dd/Desktop/Code/NODE/node_modules/firebase/app-node.js:22:335) в (/Users/dd/Desktop/Code/NODE/node_modules/firebase/app-node.js:20:68) в Object.c [как база данных] (/Users/dd/Desktop/Code/NODE/node_modules/firebase/app-node.js:21:447) на объекте. (/Users/dd/Desktop/Code/NODE/Bot.js:24:25) в Module._compile (module.js: 570: 32) в Object.Module._extensions..js (module.js: 579: 10) в Module.load (module.js: 487: 32) в tryModuleLoad (module.js: 446: 12) в Function.Module._load (module.js: 438: 3) в Module.runMain (module.js: 604: 10) при запуске (bootstrap_node.js: 394: 7) при запуске (bootstrap_node.js: 149: 9) в bootstrap_node.js: 509: 3 dd-mac: NODE dd $ Может ли кто-нибудь помочь?
S

Samuel Aubin

5 лет назад

Ответов: 18

Не удалось завершить компиляцию: тип программы уже присутствует: com.google.android.gms.internal.measurement.zzabn

При компиляции моего проекта я получаю следующее сообщение об ошибке:Program type already present: com.google.android.gms.internal.measurement.zzabn Message{kind=ERROR, text=Program type already present: com.google.android.gms.internal.measurement.zzabn, sources=[Unknown source file], tool name=Optional.of(D8)} илиD8: Program type already present: com.google.android.gms.internal.measurement.zzabo Со следующей трассировкой стека в журнале Gradleat com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55) at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104) at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:212)\\nat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:46) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62) at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97) at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87) at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98) at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626) at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) at java.lang.Thread.run(Thread.java:745) Caused by: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\0.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\4.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\6.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\7.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\8.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\9.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\10.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\12.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\13.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\14.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\17.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\18.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\19.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\20.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\21.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\22.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\23.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\24.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\25.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\26.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\27.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\28.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\29.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\30.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\31.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\32.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\34.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\39.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\40.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\44.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\45.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\46.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\47.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\48.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\49.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\51.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\52.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\53.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\55.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\56.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\57.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\58.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\59.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\83.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\84.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\85.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\86.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\87.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\88.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\89.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\90.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\91.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\92.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\93.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\94.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\95.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\96.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\97.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\100.jar, D:\Android\appName\app\build\intermediates\transforms\dexBuilder\debug\101.jar at com.android.builder.dexing.D8DexArchiveMerger.getExceptionToRethrow(D8DexArchiveMerger.java:124) at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:109) at com.android.build.gradle.internal.transforms.DexMergerTransformCallable.call(DexMergerTransformCallable.java:101) at com.android.build.gradle.internal.transforms.ExternalLibsMergerTransform.transform(ExternalLibsMergerTransform.kt:123) at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:221) at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:217) at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102) ... 48 more Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:76) at com.android.tools.r8.utils.ExceptionUtils.withD8CompilationHandler(ExceptionUtils.java:45) at com.android.tools.r8.D8.run(D8.java:67) at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:107) ... 53 more Caused by: com.android.tools.r8.utils.AbortException at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:77) at com.android.tools.r8.utils.Reporter.fatalError(Reporter.java:58) at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:67) ... 56 more
J

Jack Wilson

4 года назад

Ответов: 8

В разрешении Firebase отказано

Я относительно новичок в программировании, и у меня проблемы.У меня есть этот код для отправки данных в firebaseapp.userid = app.user.uid var userRef = app.dataInfo.child (app.users); var useridRef = userRef.child (app.userid); useridRef.set ({ локации: "", тема: "", Цветовая схема: "", еда: "" }); Однако я все время получаю ошибку: ПРЕДУПРЕЖДЕНИЕ ПО FIREBASE: установить в / users / (GoogleID) не удалось: разрешение_denied 2016-05-23 22: 52: 42.707 firebase.js: 227 Uncaught (в обещании) Ошибка: PERMISSION_DENIED: Permission denied (…) Когда я пытаюсь найти это, он говорит о правилах для Firebase, которые, похоже, написаны на языке, который я еще не изучил (или это просто выходит у меня из головы). Может кто-нибудь объяснить, что вызывает проблему? Я думал, что прошу сохранить адрес электронной почты и отображаемое имя пользователя, а вам просто не разрешили это делать, но когда я удалил их, у меня все еще была та же проблема. Есть ли способ избежать этой ошибки, не устанавливая правила, или правила - это то, чему я могу научить себя, как писать за день, или я просто не в своей лиге?Спасибо за любую помощь!
R

Robert Prine

6 лет назад

Ответов: 8

Канал async не найден

Я пытаюсь создать простой блог с Angular 2 и Firebase, и у меня возникают проблемы с использованием async pipe в компоненте. Я получаю ошибку в консоли. zone.js: 344 Отклонение необработанного обещания: Ошибки синтаксического анализа шаблона: Канал async не может быть найден (" [ОШИБКА ->] {{(blog.user | async) ?. first_name}} "): BlogComponent@6: 3; Зона:; Задача: Promise.then; Значение: Ошибка: Ошибки синтаксического анализа шаблона: (…) Ошибка: Ошибки синтаксического анализа шаблона: Канал async не может быть найден (" blog.component.tsимпорт {Component, Input} из "@ angular / core"; @Компонент({ селектор: 'блог-компонент', templateUrl: './blog.component.html', styleUrls: ['./blog.component.css'], }) export class BlogComponent { @Input () блог; } blog.component.html {{blog.title}} {{(blog.user | async) ?. first_name}} app.component.tsимпорт {Component} из '@ angular / core'; импортировать {BlogService} из "./services/services.module"; @Компонент({ селектор: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { конструктор (частный blogService: BlogService) {} article = this.blogService.getAllArticles (); } app.component.html blog.service.tsимпорт {Injectable} из "@ angular / core"; импортировать {AngularFire} из "angularfire2"; import {Observable} из "rxjs"; import "rxjs / add / operator / map"; @Injectable () export class BlogService { конструктор (частный af: AngularFire) {} getAllArticles (): Observable { return this.af.database.list ('статьи', { запрос: { orderByKey: правда, limitToLast: 10 } }). map ((статьи) => { return article.map ((article) => { article.user = this.af.database.object (`/ users / $ {article.user_id}`); возврат статьи; }); }); } } Проблема возникает только тогда, когда я пытаюсь использовать async в файле blog.component.html. Это сработает, если я попытаюсь напечатать имя пользователя в файле app.component.html. Должен ли я вводить AsyncPipe в blog.module.ts? Как я могу заставить асинхронный режим работать в blog.component.ts?
B

Balaji

5 лет назад

Ответов: 12

Firebase cloud functions is very slow

We're working on an application that uses the new firebase cloud functions. What currently is happening is that a transaction is put in the queue node. And then the function removes that node and puts it in the correct node. This has been implemented because of the ability to work offline. Our current problem is the speed of the function. The function itself takes about 400ms, so that's alright. But sometimes the functions take a very long time (around 8 seconds), while the entry was already added to the queue. We suspect that the server takes time to boot up, because when we do the action once more after the first. It takes way less time. Is there any way to fix this problem? Down here i added the code of our function. We suspect there's nothing wrong with it, but we added it just in case.const functions = require('firebase-functions'); const admin = require('firebase-admin'); const database = admin.database(); exports.insertTransaction = functions.database .ref('/userPlacePromotionTransactionsQueue/{userKey}/{placeKey}/{promotionKey}/{transactionKey}') .onWrite(event => { if (event.data.val() == null) return null; // get keys const userKey = event.params.userKey; const placeKey = event.params.placeKey; const promotionKey = event.params.promotionKey; const transactionKey = event.params.transactionKey; // init update object const data = {}; // get the transaction const transaction = event.data.val(); // transfer transaction saveTransaction(data, transaction, userKey, placeKey, promotionKey, transactionKey); // remove from queue data[`/userPlacePromotionTransactionsQueue/${userKey}/${placeKey}/${promotionKey}/${transactionKey}`] = null; // fetch promotion database.ref(`promotions/${promotionKey}`).once('value', (snapshot) => { // Check if the promotion exists. if (!snapshot.exists()) { return null; } const promotion = snapshot.val(); // fetch the current stamp count database.ref(`userPromotionStampCount/${userKey}/${promotionKey}`).once('value', (snapshot) => { let currentStampCount = 0; if (snapshot.exists()) currentStampCount = parseInt(snapshot.val()); data[`userPromotionStampCount/${userKey}/${promotionKey}`] = currentStampCount + transaction.amount; // determines if there are new full cards const currentFullcards = Math.floor(currentStampCount > 0 ? currentStampCount / promotion.stamps : 0); const newStamps = currentStampCount + transaction.amount; const newFullcards = Math.floor(newStamps / promotion.stamps); if (newFullcards > currentFullcards) { for (let i = 0; i { // Log to the console if an error happened. console.log('The read failed: ' + error.code); return null; }); }, (error) => { // Log to the console if an error happened. console.log('The read failed: ' + error.code); return null; }); }); function saveTransaction(data, transaction, userKey, placeKey, promotionKey, transactionKey) { if (!transactionKey) { transactionKey = database.ref('transactions').push().key; } data[`transactions/${transactionKey}`] = transaction; data[`placeTransactions/${placeKey}/${transactionKey}`] = transaction; data[`userPlacePromotionTransactions/${userKey}/${placeKey}/${promotionKey}/${transactionKey}`] = transaction; }
S

Stan van Heumen

5 лет назад

Как защитить конечную точку HTTP Firebase Cloud Function, чтобы разрешить только пользователям, прошедшим аутентификацию Firebase?

С новой облачной функцией firebase я решил переместить часть моей конечной точки HTTP на firebase. Все отлично работает ... Но у меня такая проблема. У меня есть две конечные точки, построенные с помощью HTTP-триггеров (облачные функции) Конечная точка API для создания пользователей и возврата настраиваемого токена генерируется Firebase Admin SDK. Конечная точка API для получения определенных сведений о пользователе. Хотя с первой конечной точкой все в порядке, но для моей второй конечной точки я хотел бы защитить ее только для аутентифицированных пользователей. Имеется в виду тот, у кого есть токен, который я сгенерировал ранее.Как мне решить эту проблему?Я знаю, что мы можем получить параметры заголовка в облачной функции, используяrequest.get('x-myheader') но есть ли способ защитить конечную точку так же, как защиту базы данных в реальном времени?
s

spaceMonkey

5 лет назад

В чем разница между Cloud Firestore и базой данных Firebase Realtime?

Google только что выпустил Cloud Firestore, свою новую базу данных документов для приложений.Я читал документацию, но не вижу большой разницы между Firestore и Firebase DB.Главное, что Firestore использует документы и коллекции, которые позволяют легко использовать запросы по сравнению с Firebase, которая представляет собой традиционную базу данных noSQL с базой JSON.Я хотел бы узнать немного больше об их различиях или использовании, а также о том, пришел ли Firestore на замену Firebase DB?
F

Francisco Durdin Garcia

4 года назад

Ответов: 7

Список всех пользователей из аутентификации Firebase

В настоящее время я использую обертку Pyrebase для получения информации (такой как их электронная почта и дата создания) обо всех пользователях. Я пытался просмотреть документацию и сопоставить ее с документацией Pyrebase, но, похоже, не могу понять, что мне нужно. В настоящее время я пробовал следующее:import pyrebase config={all required information, including path to service account .json file} firebase=pyrebase.initialize_app(config) db=firebase.database() auth=firebase.auth() extract_user = db.child('users').child('userId').get() for x in extract_user.each(): print(x.val()) auth.get_account_info(user[x.val()]) Но я все равно потерпел неудачу, я знаю, что я что-то упустил, но не уверен, что именно.Примечание: я сохранил идентификатор пользователя в базе данных под именем userId. Поэтому я перебирал каждый идентификатор, чтобы использовать его в 'get_account_info'.Есть предложения или способы, с помощью которых я могу это сделать?
M

Master Irfan Elahee

год назад

Ответов: 1

Firebase SDK для Android использует сокеты для подключения к Realtime Firebase, могу ли я сделать то же самое в моем собственном приложении Java с моими собственными сокетами?

Раньше я создал игру для Android и... Теперь я пытаюсь разработать ту же игру для ПК на Windows на Java и хочу использовать Realtime Firebase и здесь, но нет возможности подключиться к ней тем же способом, потому что я не могу использовать для этого Firebase SDK для Android. А с Firebase Rest API я не могу удерживать соединение открытым, что означает, что для каждого вызова будет создаваться новое соединение, если попытаться использовать этот подход.Мне нужно использовать сокеты, чтобы держать соединение открытым в течение длительного времени.Вопрос в том, могу ли я создать свой собственный сокет для подключения к Realtime Firebase так же, как Firebase SDK для Android делает это на Java для моего игрового приложения для Windows?.Заранее спасибо
J

J. Dove

год назад

Ответов: 1

Запрос Firebase возвращает неверные элементы

Здесь представлена структура моей базы данных:"current" : { "-MPcUEyEdXiotnBybJFM" : { "completed" : 123456789, "completedBy" : "Mom", "name" : "🍼 Babysit (2 hours)", "repeats" : 12, "startDate" : 1609144537, "value" : 884 }, "-MPcUEyF9YsmQrGpt78Q" : { "completed" : 1609144538, "completedBy" : "Mom", "name" : "🛠 Organize garage", "repeats" : 6, "startDate" : 1609144538, "value" : 884 }, "-MPkV1sOlx3wNS8UvEqQ" : { "name" : "🕸 Dust for cobwebs", "repeats" : 1, "startDate" : 1611957359, "value" : 221 } } А вот мой запрос к Firebase:static func deleteOldCompletedItems(completion: @escaping () -> Void) { let previousPayday = FamilyData.calculatePayday().previous.timeIntervalSince1970 FB.ref .child(FB.jobJar) .child(FB.current) .queryOrdered(byChild: FB.completed) .queryEnding(atValue: previousPayday) .observeSingleEvent(of: .value, with: { (snapshot) in print(previousPayday) guard snapshot.exists() else { completion() return } var deletedItemsCount = 0 for item in snapshot.children { guard let snap = item as? DataSnapshot else { return } snap.ref.removeValue { (_, _) in deletedItemsCount += 1 if deletedItemsCount == snapshot.childrenCount { completion() } } } }) } А вот модель данных:struct JobJar { var name: String var value: Int var repeats: Int var startDate: Double var completed: Double? var completedBy: String? } Обратите внимание, что два параметра являются необязательными: completed: и completedBy:.Я хочу получить из своей базы данных только те элементы, которые соответствуют временной метке completed: и которым больше недели. Затем я хочу удалить эти элементы.Код отлично работает для элементов, которые имеют параметр completed:.Но по какой-то причине мой запрос возвращает элементы, у которых нет временной метки completed:. Другими словами, мой запрос удаляет элементы, которым больше недели (хорошо!), но также и все остальные элементы, у которых нет временной метки. Он удаляет слишком много вещей.Почему? Потому что параметр completed: является необязательным? Как мне запросить базу данных, чтобы получить ТОЛЬКО те элементы с параметром completed:, которым больше недели?
P

Phontaine Judd

год назад

2022 WebDevInsider