2016-07-05 9 views
0

Pubnub Documentationに記載されているように、プレゼンスイベントでデータ(状態)オブジェクトを取得しようとしています。ここでPubnub:プレゼンスイベントで状態オブジェクトを取得できません

は私のコードがあります: -

// Subscribe to messages channel 
Pubnub.subscribe({ 
    channel: $scope.channel, 
    triggerEvents: ['callback','presence','message'], 
    state: { 
     username : $scope.username, 
     membershipType : $scope.membershipType, 
     memberDealsIn : $scope.memberDealsIn 
    } 
}); 

//Track online users 
Pubnub.here_now({ 
    channel : $scope.channel, 
    state: true, 
    callback : function(m){ 
     $scope.$apply(function() { 

      $scope.onlineUsers.push(m['uuids']) 
     }); 
    } 
}); 

//User's State 
Pubnub.state({ 
    channel : $scope.channel, 
    state : { 
     username : $scope.username, 
     membershipType : $scope.membershipType, 
     memberDealsIn : $scope.memberDealsIn 
    }, 
    callback : function(m){ 
     //console.log(m) 
    }, 
    error : function(m){ 
     //console.log(m) 
    } 
}); 

私のようにPubnubのgetPresenceEventNameForメソッドからそれを呼び出しています: -

$scope.$on(Pubnub.getPresenceEventNameFor($scope.channel), function (ngEvent, pnEvent) { 
    console.log("pnEvent: ", pnEvent); 
} 

ここに私の出力です: -

pnEvent: Object {action: "join", uuid: "1310974", timestamp: 1467719168, occupancy: 3} 

することができますように他のすべてがうまくいくのを見てくださいが、私はそこにデータを得ることができません。私は今、しばらくの間、この事で立ち往生されている

{ 
"action" : "join", 
"timestamp" : 1345546797, 
"uuid" : "175c2c67-b2a9-470d-8f4b-1db94f90e39e", 
"occupancy" : 2, 
"data" : { 
    "age" : 67, 
    "full" : "RobertPlant", 
    "country" : "UK", 
    "appstate" : "foreground", 
    "latlong" : "51.5072°N,0.1275°W" 
    } 
} 

- :Documentation一方 は次のようにそれは、あまりにもデータを持っていなければならないと言います。 :(

なぜプレゼンス・イベントに設定されている状態ではありません。私はここで間違ってやっているものを私に教えてください。あなたの助けを

感謝。

+0

すべての場合に必ずしも期待される結果が得られるわけではないため、状態を登録しないでください。代わりに、ベストプラクティスはサブスクライブすることです。クライアントが独自の参加イベントを取得すると、状態を設定します。その後、ステートチェンジイベントを信頼性の高い一貫した方法で取得します。これが問題を解決するかどうかご連絡ください。そうでない場合は、[PubNub Support](http://pubnub.com/support)に電子メールを送信してこのスレッドの詳細とリンクを作成することをお勧めします。 –

+0

** "クライアントが独自のjoinイベント、set stateを取得したときに意味することを理解できません"。** here_nowイベントがトリガーされたときの状態を設定しています。初めて私はhere_nowイベントでオンラインユーザーリストを生成しています。プレゼンスイベントでオンラインユーザーリストを再生成しているため、プレゼンスイベントでも状態が必要です。ユーザーがオンラインになったばかりの場所からデータ(状態)を取得する場所はどこですか?私はプレゼンスイベントから新しいユーザーだけを検出できると思いますか?したがって、データはプレゼンスイベントに存在する必要があります。 –

+0

サポートチケットに詳細が記載されています。私たちがあなたのために良い解決策に達したときにここに戻ってきます。 –

答えて

0

最後に。私は検出することができました問題は、おかげでサポートをpubnubする。 それはイベントの間違ったタイミングによるものであった。 を私のコードでは、here_nowイベントは、その状態が設定されているユーザーのプレゼンスイベントの前にトリガされていた。

今私は、ユーザー自身の参加イベントの状態を設定し、stのhere_nowイベントを呼び出していますア - チェンジイベント。そしてその働き。

//Presence Callback 
$scope.$on(Pubnub.getPresenceEventNameFor($scope.channel), function (ngEvent, pnEvent, envelope, channel) { 

    //Detect Join events for users 
    if (pnEvent['action'] === 'join') { 

     //Detect User's own join event and set state for the user 
     if (pnEvent['uuid'] === $scope.uuid) { 
      //User's State 
      Pubnub.state({ 
       channel : $scope.channel, 
       state : { 
        username : $scope.username, 
        membershipType : $scope.membershipType, 
        memberDealsIn : $scope.memberDealsIn 
       }, 
       callback : function(m){ 
        //console.log(m) 
       }, 
       error : function(m){ 
        //console.log(m) 
       } 
      }); 
     } 
    } 

    //Detect state change event 
    if (pnEvent['action'] === 'state-change') { 

     //Call here_now on state change of a user 
     //Track online users 
     Pubnub.here_now({ 
      channel : $scope.channel, 
      state: true, 
      callback : function(m){ 
       $scope.$apply(function() { 

        for (var userIdx in m['uuids']) { 
         var user = m['uuids'][userIdx]; 

         //Push new user to online User's list if not there 
         if (!_.find($scope.onlineUsers, {uuid: user.uuid}) && (user.uuid != $scope.uuid)){ 

          //Push only if state is not undefined 
          if (user.state.membershipType != null) { 
           $scope.onlineUsers.push({uuid: user.uuid, membership: user.state.membershipType, dealsin: user.state.memberDealsIn, username: user.state.username}); 
          } 
         } 
        } 
       }); 
      } 
     }); 
    } 
関連する問題