2009-08-21 9 views
1

私はXMPPHPを使用して、自分のアプリケーションユーザのGmailアカウントのリストを取得しています。
XMPPHPは、ロスタの連絡先のオンラインステータスも通知できますか?
私はそれを行う方法を見つけることができないようです...オンラインステータスのXMPPHP名簿

歓声。

答えて

0

私はGoogleトークでそれを試していないが、一般的にあなたがここ

$roster->getPresence($jid)['status'] 
+0

が空になっているようです(存在アレイ全体がかなり空です) – Omer

0
$uStatus = $conn->roster->getPresence($jid); 

echo "Online status: " . $uStatus['show']; // tells whether available or unavailable or dnd 
echo "Status message: " . $uStatus['status']; // shows the user's status message 
2

を探しているのは、名簿リストとGmailユーザーのオンラインプレゼンスの一例です。

$user_name = 'ENTER_EMAIL_ID'; 
$password = 'ENTER_PASSWORD'; 
$end_loop = 0; 

$conn = new XMPPHP_XMPP('talk.google.com', 5222, $user_name,$password, "xmpphp", 'gmail.com', $printlog=false, $loglevel=XMPPHP_Log::LEVEL_INFO); 
$conn->autoSubscribe(); 

try { 
    $conn->connect(); 
    while($end_loop <=0) { 
     $payloads = $conn->processUntil(array('end_stream', 'session_start','roster_received')); 
     foreach($payloads as $event) { 
      $pl = $event[1]; 
      switch($event[0]) { 

       case 'session_start': 
        $conn->getRoster(); 
        $conn->presence('I m presence'.time()); 
       break; 

       case 'roster_received': 
       $array_contact=$pl; 

       foreach($array_contact as $user => $friends_name){ 
        echo "<li>".$user.'_NAME_'.$friends_name['name'].'</li>'; 
       } 
       $end_loop++; 
       break; 
      } 
     }  
    } 

    while(1) 
    { 
     $payloads = $conn->processUntil(array('presence')); 
     echo "<li>".$payloads[0][1]['from']."_Show_". $payloads[0][1]['show']."</li>"; 

     $_SESSION[$payloads[0][1]['from']] = "~~"; 
    } 

$conn->disconnect(); 

} catch(XMPPHP_Exception $e) { 
    die($e->getMessage()); 
} 
+0

processUntil( 'roster_received')は 'roster_received'をトリガーすることはありませんでした。 – lwitzel

0

私はここに同様の質問への答えを投稿:

  1. $ conn->プレゼンス()だけでなく、自分のステータスを送信します。ここではXMPPHP GTalk Status

    は、それが動作するように得るためにキーがありますサーバーに送信するだけでなく、各連絡先のステータスを収集し、あなたの名簿に値を設定します。実際は$ conn-> getRoster()と同じことをしますが、各連絡先のプレゼンス情報も収集します。

  2. サーバをiqブロックに送信するチャンスを与えるには、スクリプトを遅らせなければなりません。これは、一度に1つの連絡先になるように見えます。私はサンプルコードで$ conn-> processUntil( '存在')と$ conn-> processUntil( 'roster_received')の両方を見てきましたが、最初のものは十分に長く待たずに2番目のものは決して終了しません。 $ conn-> processTime(2)を使って2秒待ってすべてのiqブロックがあることを確認しました。

もう1つの鍵は冗長なログを有効にすることでした。あなたの出力は(私の場合は、ブラウザウィンドウ)であるものは何でもに

$conn = new XMPPHP_XMPP('talk.google.com', 5222, $user_name,$password, "xmpphp", 'gmail.com', $printlog=true, $loglevel=XMPPHP_Log::LEVEL_VERBOSE); 

この意志出力詳細なログ:あなたはあなたの最初のオブジェクトの建設であることを行います。

関連する問題