2016-08-23 2 views
2

Хотел бы увеличить счет в Firebase, но без отображения текущего кол-ва клиентом.Есть ли способ увеличить счет в Firebase, не подвергая текущий счет клиенту?

Я прочитал множество полезных ответов об использовании транзакций для увеличения счетчиков в Firebase, но все они предполагают, что клиент «прочитал» доступ к элементу-счетчику. Что делать, если клиент не должен иметь доступ для чтения к счету, но я хочу увеличить его на основе действий пользователя?

Пример:

Предположим, что я хочу, чтобы отслеживать просмотры и показы (или другие действия пользователя) на определенной части контента. Счета учитываются только для внутренних глаз и, возможно, для совместного использования с рекламодателями и партнерами, но не показаны самим пользователям, и мы не хотим делиться этими данными с конкурентами, предоставляя его браузеру.

В таких случаях я мог бы маршрутизировать объекты через серверный процесс, в котором серверный процесс извлекает счетчик и увеличивает его, но этот вид поражает цель использования Firebase в первую очередь. Существуют ли другие опции для увеличения «частного» счетчика из браузера?

+1

Firebase недавно выпустил Облачные функции. Посмотрите на этот [ответ] (http://stackoverflow.com/a/42713792/5861618) для более подробной информации –

ответ

3

Я не уверен, почему вы получаете downvoted, поскольку это кажется правильным вопросом для меня.

Существует не серверный способ увеличения счетчика в Firebase. Благодаря этим знаниям единственный способ увеличить приращение счетчика - заставить клиента выполнить приращение. Хотя вы можете обеспечить это с помощью правил, чтобы каждый пользователь мог только увеличивать один раз, что каждый шаг - это один шаг и многое другое, клиентское приложение должно должно иметь возможность читать текущее значение.

Общим решением проблемы является введение сервера подсчета голосов. Каждый клиент может записать запись «Я просмотрел этот контент» в базу данных, а затем у вас есть сервер, который слушает эту очередь и обновляет счет.

viewQueue 
    $pushId 
     uid: <uid> 
     itemId: <itemId> 
viewCounts 
    $itemId: <totalViewCount> 

Вы могли бы обеспечить это, так что пользователи могут писать только в очередь просмотра, и только сервер (который, вероятно, будет работать под учетной записью службы может получить доступ к количеству просмотров:

{ 
    "rules": { 
    "viewQueue": { 
     ".read": false, // only the server can read this 
     "$pushid": { 
     ".write": "newData.exists() && !data.exists()" 
     } 
    }, 
    "viewCounts": { 
     // only the server can access this 
     ".read": false, 
     ".write": false 
    } 
    } 
} 
Смежные вопросы