Я использую XMPPHP для получения списка пользователей моего аккаунта GMail.
Может ли XMPPHP также сообщить мне статус онлайн-контактов в списке?
Я не могу найти, как это сделать …
веселит.
Вот пример списка реестров и онлайн-присутствие пользователей 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()); }
Я не пробовал это с помощью Google Talk, но, как правило, вы ищете
$roster->getPresence($jid)['status']
$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
Я ответил на аналогичный вопрос: XMPPHP GTalk Status
Вот ключи, чтобы заставить его работать:
Другой ключ для меня заключался в подробном протоколировании. Вы делаете это в своей начальной конструкции объекта:
$conn = new XMPPHP_XMPP('talk.google.com', 5222, $user_name,$password, "xmpphp", 'gmail.com', $printlog=true, $loglevel=XMPPHP_Log::LEVEL_VERBOSE);
Это будет выводить подробный журнал на любой ваш вывод (в моем случае это окно браузера).