2013-02-20 2 views
4

Я пытаюсь создать «FourConnect» -игра с javascript. Я хочу, что есть список из всех онлайн-пользователей. Этот список я сделал с примером на сайте firebase. Теперь я хочу, чтобы я мог выбрать одного пользователя онлайн и отправить им приглашение поиграть со мной. Итак, я написал функцию, которую все пользователи ожидают от меня, есть дополнительный div. Когда я нажимаю на div, этот специальный пользователь должен получить окно подтверждения, чтобы сказать okey или отменить. Если пользователь нажимает кнопку «ОК», игра должна начинаться. Я сохраню имя и идентификатор от пользователя. Это уже работает.Как отправить предупреждающее сообщение специальному онлайн-пользователю с firebase

Моя проблема в том, что я не знаю, как отправить запрос другому пользователю. Я пробовал много, но всегда ящик подтверждения находится на моем браслере не в браузере другого пользователя.

Я искал решения на странице firebase и в google, но не смог найти ничего, что решает мою проблему.

код у меня уже есть:

var name = prompt("Your name?", "Guest"), 
     currentStatus = "★ online"; 

    // Get a reference to the presence data in Firebase. 
    var userListRef = new Firebase(connectFour.CONFIG.firebaseUrl); 

    // Generate a reference to a new location for my user with push. 
    var myUserRef = userListRef.push(); 
    var gameId = myUserRef.name(); 
    document.getElementById('labelGameId').innerHTML = gameId; 

    beginGame({id: gameId, name: name, status: currentStatus}); 
    // Get a reference to my own presence status. 
    var connectedRef = new Firebase('http://presence.firebaseio-demo.com/.info/connected'); 
    connectedRef.on("value", function(isOnline) { 
    if (isOnline.val()) { 
     // If we lose our internet connection, we want ourselves removed from the list. 
     myUserRef.onDisconnect().remove(); 

     // Set our initial online status. 
     setUserStatus("★ online"); 
    } else { 

     // We need to catch anytime we are marked as offline and then set the correct status. We 
     // could be marked as offline 1) on page load or 2) when we lose our internet connection 
     // temporarily. 
     setUserStatus(currentStatus); 
    } 
    }); 
//} 


    // A helper function to let us set our own state. 
    function setUserStatus(status) { 
    // Set our status in the list of online users. 
    currentStatus = status; 
    myUserRef.set({ name: name, status: status }); 
    } 

    // Update our GUI to show someone"s online status. 
    userListRef.on("child_added", function(snapshot) { 
    var user = snapshot.val(); 
    $("#output").append($("<div/>").attr("id", snapshot.name())); 
    $("#" + snapshot.name()).text(user.name + " is currently " + user.status); 
    if(snapshot.name() != myUserRef.name()){ 
     var $invite = $('<div id="invite">invite</div>'); 
     $("#output").append($invite); 
     $($invite).on('click', function(){ 
      //startGame(user); 
      console.log('Gegner2: '+snapshot.name()); 
      console.log('Genger2Name: '+user.name); 
       joinGame({id: snapshot.name(), name: user.name, status: user.status}); 
     }); 
    } 

    }); 

    // Update our GUI to remove the status of a user who has left. 
    userListRef.on("child_removed", function(snapshot) { 
    $("#" + snapshot.name()).remove(); 
    }); 

    // Update our GUI to change a user"s status. 
    userListRef.on("child_changed", function(snapshot) { 
    var user = snapshot.val(); 
    $("#" + snapshot.name()).text(user.name + " is currently " + user.status); 
    }); 
    document.onIdle = function() { 
    setUserStatus("☆ idle"); 
    } 
    document.onAway = function() { 
    setUserStatus("☄ away"); 
    } 
    document.onBack = function (isIdle, isAway) { 
    setUserStatus("★ online"); 
    } 

    setIdleTimeout(5000); 
    setAwayTimeout(10000); 


function joinGame(opponent) { 
    console.log(opponent); 
    console.log(opponent.id); 
    var player2ID = opponent.id; 
    myUserRef = new Firebase(connectFour.CONFIG.firebaseUrl + opponent.id); 
    myUserRef.once('value', function(dataSnapshot){ 
     if(dataSnapshot.val()){ 
      beginGame({id: player2ID , name: opponent.name, status: opponent.status}); 
     }else{ 
      alert("game doesn't exist"); 
     } 
    }); 

} 

function beginGame(player) { 
    console.log(player); 
    console.log('Id spieler1: '+gameId); 

    }); 

С помощью этого кода я могу нажать на «пригласить», а затем я буду видеть идентификатор, который пользователь имел. Я также хотел отправить идентификатор beginGame(), но это не работает.

Мой Firebase Структура:

игры

-InmydEpSe5oZcLZUhfU

-InrLM6uxAsoOayOgFce

-name: "Barbara" 

    -status: "away" 
+0

Некоторый код или рабочий пример помогут немного. Кроме того, диаграмма вашей структуры Firebase пойдет довольно долго, чтобы объяснить, что вам нужно. Самое главное, вы выбираете случайного пользователя или уже знаете идентификатор пользователя? – Kato

+0

Я отредактировал мой вопрос. Надеюсь, это поможет вам понять мою проблему. – user2090392

+0

> см. Демо здесь => [Push-уведомление с Firebase] (http://stackoverflow.com/questions/37814710/ios-or-objective-c-or-iphone-implementation-push-notification-with-firebase-best) –

ответ

7

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

var root = new Firebase(...); 

//On initialization start listening for messages 
root.child("users/inbound-messages").on("child_added", 
    function(newMessageSnapshot) { 
    displaySomethingToTheUser(newMessageSnapshot.val()); 
    newMessageSnapshot.ref().remove(); 
    } 
); 

//Send a message to another user 
root.child(otherUserId).child("inbound-messages").push("Hi other user!"); 
+1

Из интереса, почему 'newMessageSnapshot.ref(). remove();'? – KnewB

+0

http://codingaffairs.blogspot.com/2016/06/firebase-cloud-messaging-push.html –

1

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

Ну, в его структуре, вы просто добавить что-то вроде:

-Games 
    -rooms 
     -charOfRoomSpecific 
         - users 
             
             + InmydEpSe5oZcLZUhfU 

              -InrLM6uxAsoOayOgFce 
                     name: "Barbara" 
                     status "away" 
          
       - messages 
           + InmyBlaBlae5oZcLPKSu 
           -InmyBlaBlae5oZcLPKSu2 
                user: "Barbara" 
                say: "Hello man, will gamer!" 


     + charOfRoomSpecific2 
     + charOfRoomSpecific3 
     ... 

Так, пользователи в комнате могут прочитать сообщение просто:

FirebaseRef.child ("rooms/charOfYourRoomSpecific/messages"); 

И каждый, кто имеет доступ к эта комната увидит в реальном времени их разговоры.

Смежные вопросы