Может ли автономный пользователь выполнять транзакции базы данных, специфичные для его uid в базе данных Firebase Realtime? - PullRequest
0 голосов
/ 18 октября 2018

Ситуация:

Пользователь запускает приложение без подключения к интернету.Я пытаюсь аутентифицировать их анонимно в процессе запуска и выполняю запись в базу данных по ссылке '/ users / $ uid' , в базе данных с такой структурой правил:

{
  "rules": {
    "users": {
      "$user_id": {
        ".write": "$user_id === auth.uid",
        ".read": "$user_id === auth.uid"
      }
    }
  }
}

Итак, если такая ситуация возникает, а затем пользователь подключается к сети, будет ли фактически выполнена транзакция базы данных в очереди - или мне нужно вручную повторно пройти аутентификацию и повторить транзакцию базы данных?

I'mне уверен, будет ли uid для анонимной аутентификации генерироваться, если пользователь находится в автономном режиме, поэтому я не думаю, что ссылка на базу данных может быть разрешена.

Ссылочные ссылки:

https://firebase.google.com/docs/auth/android/anonymous-auth https://firebase.google.com/docs/database/android/offline-capabilities

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Итак, после проверки этого, я обнаружил, что:

  • На uid нельзя положиться между перезапусками, если пользователь никогда не имел связи в первую очередь
  • Транзакции базы данныхкоторые выполняются локально - потому что у вас есть setPersistence (true) - будут поставлены в очередь и синхронизированы с удаленным, независимо от того, имеет ли пользователь подключение или нет, но не, если используемая DatabaseReference содержит ссылку на uid текущего пользователя, потому что это не может бытьмежду перезапусками (например, в сценарии, описанном в вопросе).

Чтобы обойти это, я использую локальное хранилище с помощью SharedPreferences для самых основных данных и ожидаю соединения перед тем, каксоздание экземпляра DatabaseReference, который ссылается на uid пользователя.

0 голосов
/ 18 октября 2018

Я бы сохранил данные в sharedpreferences или локальной БД (зависит от типа данных, которые вы хотите сохранить).

После этого либо запустите фоновую службу и попробуйте подключаться к вашей базе данных реального времени каждые 10 минут, либо выЯ хочу, чтобы пользователь в следующий раз открыл приложение и проверил, нужно ли проверять любую аутентификацию.

Для фоновой службы я бы порекомендовал AlarmManger.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...