Я пытаюсь получить свой онлайн-статус с помощью XMPPHP, и я не могу получить ничего, что имеет мой статус из $conn
. Вот фрагмент моего кода:
require_once('XMPPHP/XMPP.php'); $conn = new XMPPHP_XMPP('talk.google.com', 5222, 'xxxx@gmail.com', 'xxxxx', 'xmpphp', 'gmail.com', $printlog = false, $loglevel = XMPPHP_Log::LEVEL_INFO); $conn->connect(); $conn->processUntil('session_start'); $conn->presence($status='Controller available.'); var_dump($conn); // this gives me a long output but nothing about status. ex: http://pastebin.com/yfs1V5Jb
Я также попробовал getRoster()
чтобы увидеть список информации моего друга (хотя меня интересует только моя), но не повезло.
Любые предложения, как я могу заставить это работать? Благодарю.
Я занимался этой проблемой в течение последних 2 дней и, наконец, понял, что нужно работать. Я документирую это здесь, потому что это был вопрос переполнения стека, который чаще всего появлялся для меня при поиске ответов.
Метод $ conn-> presence () не только отправляет вашу информацию о присутствии на сервер; он также собирает информацию о присутствии для каждого контакта с сервера. Основная проблема заключается в том, что когда вы отправляете команду $ conn-> presence (), вы должны дать сценарию время для получения и обработки этой информации с сервера. В сценариях примера все используют $ conn-> processUntil ('presence') для этого, но по какой-то причине для меня это не делало паузы достаточно долго, чтобы получить всю информацию о реестре.
Чтобы обойти это, я, наконец, просто использовал $ conn-> processTime (2), заставляя вещи ждать 2 секунды, прежде чем продолжить. Это достаточно хорошо для моих целей, но, безусловно, это взломать. Итак, используя ваш код в качестве примера:
require_once('XMPPHP/XMPP.php'); $conn = new XMPPHP_XMPP('talk.google.com', 5222, 'xxxx@gmail.com', 'xxxxx', 'xmpphp', 'gmail.com', $printlog = true, $loglevel = XMPPHP_Log::LEVEL_VERBOSE); $conn->connect(); $conn->processUntil('session_start'); $conn->presence($status='Controller available.'); $conn->processTime(2); // now see the results $roster = $conn->roster->getRoster(); print_r($roster); // you should now see roster array with presence info for each contact
Чтобы более точно ответить на ваш вопрос, вместо кода в разделе «теперь см. Результаты» вы можете использовать следующее:
$my_jid = 'user@domain.tld'; // put your jid here $status = $conn->roster->getPresence($my_jid); echo $status['show'];
Это отобразит статус онлайн для предоставленного вами джипа.
Обратите внимание, что в этом примере я также изменил конструктор, чтобы отобразить наиболее подробный журнал. Это было ключом к тому, чтобы помочь мне в этом.
Лучшим решением, очевидно, было бы добавить команду $ conn-> processUntil ('roster') в фреймворк или что-то в этом роде. Но поскольку структура не обновляется через 5 лет, это вряд ли произойдет.
Надеюсь, это спасет кого-то в те часы, которые я потерял, пытаясь его решить. Приветствия.
Вы должны иметь возможность запросить свое присутствие, передав свой собственный jid (username@gmail.com) в getPresence ();
Например:
$status = $conn->roster->getPresence($jid); var_dump($status); // Make sure you are retrieving a populated presence array echo $status['show']; // available,unavailable,dnd echo $status['status']; //status message
Некоторое время назад я столкнулся с проблемой, когда эта библиотека не заполняла записи реестра. Если вы столкнулись с этой проблемой, вы должны применить исправление, подробно описанное здесь: https://code.google.com/p/xmpphp/issues/detail?id=44&q=empty