Firebase соединение проверить онлайн статус офлайн в Android - PullRequest
0 голосов
/ 23 мая 2018

Если пользователь отключит Wi-Fi, 3G, 4G и т. Д. И обратный (без подключения к Интернету).Имя базы данных Firebase дочерние соединения: (true / false) Итак, когда интернет-соединения, wi-fi, 3g, 4g и т. Д. Отключены или отсутствуют, пользователь находится в автономном режиме, поэтому его невозможно найти.

Запомните два сценария: до и после.Если пользователь находится в автономном режиме до того, как другой пользователь выполнит его поиск, он не будет отображаться в списке результатов, если пользователь находится в автономном режиме после того, как другой пользователь выполнит его поиск, на нем будет отображаться значок НЕТ БОЛЬШЕ ДОСТУПНОГО

Пожалуйста, кто-нибудь, помогите мне в этой проблеме .. Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

Хотя это уже более года, чтобы прояснить путаницу.Вопрос Алекса хотел бы реализовать сценарий живого чата, в котором каждый пользователь может просматривать онлайн-статус каждого на своих концах или на своих устройствах.Простое решение - создать узел, в который все пользователи будут вводить свои онлайн-статусы.например,

    //say your realtime database has the child `online_statuses`
    DatabaseReference online_status_all_users = FirebaseDatabase.getInstance().getReference().child("online_statuses");

    //on each user's device when connected they should indicate e.g. `linker` should tell everyone he's snooping around
    online_status_all_users.child("@linker").setValue("online");
    //also when he's not doing any snooping or if snooping goes bad he should also tell
    online_status_all_users.child("@linker").onDisconnect().setValue("offline")

Так что, если другой пользователь, скажем, mario проверяет linker со своего конца, он может быть уверен, что некоторое слежение все еще продолжается, еслиlinker онлайн, т.е.

    DatabaseReference online_status_all_users = FirebaseDatabase.getInstance().getReference().child("online_statuses");
    online_status_all_users.child("@linker").addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {
        String snooping_status = dataSnapshot.getValue(String.class);
        //mario should decide what to do with linker's snooping status here e.g.
         if(snooping_status.contentEquals("online")){
            //tell linker to stop doing sh*t
         }else{
            //tell linker to do a lot of sh****t
         }     
      }

      @Override
      public void onCancelled(DatabaseError databaseError) {

      }
    });
0 голосов
/ 23 мая 2018

Чтобы решить эту проблему, вы можете создать новый узел в вашей базе данных Firebase для хранения всех онлайн-пользователей, поэтому, когда пользователь откроет приложение, вы немедленно добавите его идентификатор в этот новый созданный узел.Затем, если вы хотите проверить, находится ли пользователь в сети, просто проверьте, есть ли его идентификатор в списке.

Вы также можете добавить новое свойство с именем isOnline для каждого пользователя в вашей базе данных, а затем соответственно.

Для этого я рекомендую использовать встроенный в Firebase метод onDisconnect().Это позволяет вам заранее определить операцию, которая произойдет, как только клиент отключится.

См. Документация Firebase .

Вы также можете определить состояние подключения пользователя,Для многих функций, связанных с присутствием, вашему приложению полезно знать, когда оно подключено к сети или отключено.База данных Firebase Realtime предоставляет специальное местоположение в /.info/connected, которое обновляется каждый раз, когда изменяется состояние подключения клиента базы данных Firebase Realtime.Вот пример также из официальной документации:

DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
    connectedRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            boolean connected = snapshot.getValue(Boolean.class);
            if (connected) {
                System.out.println("connected");
            } else {
                System.out.println("not connected");
            }
        }

        @Override
        public void onCancelled(DatabaseError error) {
            System.err.println("Listener was cancelled");
        }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...