2016-03-02 4 views
0

Я изменил приложение чата firebase (тот, который доступен в репетиторе быстрой загрузки) и добавил к нему информацию о статусе пользователя, то есть когда пользователь вводит или выходит из комнаты, сообщение отображается другим пользователям. ex: Пользователь A присоединился.Приложение для чата - уведомляет пользователей со звуком, когда кто-то входит/выходит из комнаты

Теперь я пытаюсь добавить звуковое уведомление к приложению, когда пользователь уходит или входит в комнату. Для этого я использую модуль ngAudio. Но пока я не смогу достичь этой функциональности.

В настоящее время я пробовал это. Я использую неглубокие часы, чтобы проверять chatstatus массив

$scope.$watchCollection('chatstatus', function (newVal, oldVal) { 

     if ($scope.chatstatus[$scope.chatstatus.length-1].status.indexOf("joined") > -1) { 
      $scope.joinedplay.play(); 

     } 
     else{ 
      $scope.leftplay.play(); 
     } 

    }); 

Но когда я делаю это только зарегистрированный пользователь получает звуковое оповещение, но не другое (явную, так как контроллер только получение выполняется для него) ,

Я также попытался использовать директиву ngRepeatFinished (для запуска звукового уведомления, когда отображается последний элемент списка). Но это тоже не работает.

Я сделал Plunker для этого, и я точно хочу, чтобы мое приложение вел себя так, как этот plunk ведет себя.

Откройте панель в двух разных вкладках (или в браузерах) и присоединитесь к комнате чата с двумя пользователями. Когда один из двух пользователей присоединяется/уходит, другой получает alert. Это работает, поскольку мы будем обращаться к одному и тому же плунгу.

Но как достичь этого в режиме реального времени?

Примечание: Я использовал alert вместо звука в приведенном выше примере, поскольку его проще продемонстрировать.

ответ

0

Я нашел решение. Использование Firebase.on() решило проблему. https://www.firebase.com/docs/web/api/query/on.html

statusref.on('child_added', function(childSnapshot, prevChildKey) { 
      var postsData = null; 
      postsData = childSnapshot.val(); 
      logResults(postsData); 
    }); 

    function logResults(postsData) { 
     if (postsData.status.indexOf("joined") > -1) { 
      $scope.joinedplay.play(); 

     } 
     else{ 
      $scope.leftplay.play(); 
     } 
    } 
Смежные вопросы