Звучит так, как будто XMPP соответствует вашим требованиям. Это, безусловно, позволит кому-то использовать свою учетную запись Google Talk или любую другую учетную запись XMPP (например, jabber.org), если ваши «уведомления» разумны по размеру и частоте (в конце концов, это бесплатные услуги!).
Вы должны быть в состоянии выполнить этот штраф, используя существующий libraries. Это сообщение обсудит вещи на базовом уровне XMPP, но многие библиотеки предоставят API более высокого уровня для выполнения описанных здесь вещей.
Некоторые замечания о том, как достичь различных вещей, которые вы хотите:
Каждое подключение к учетной записи XMPP присваивается уникальный идентификатор, называемый 'resource'. В XMPP простой адрес, например [email protected]
, называется 'bare JID'. Вы также можете отправить конкретное соединение, включив ресурс, [email protected]/your-app829abc
(«полный JID»). Поскольку ресурсы приходят и уходят, и могут варьироваться (например, в Google их полу-рандомизация), presence используется для трансляции availability и unavailability ресурсов.
Клиент на рабочем столе должен отправить свое присутствие, чтобы мобильный клиент мог видеть его в Интернете. Он также должен включать priority '-1' в своем присутствии, чтобы предотвратить его получение обычных сообщений чата из контактов пользователя. Он также должен включать capabilities или аналогичную идентифицирующую информацию, чтобы мобильный клиент мог идентифицировать его отдельно от других приложений, таких как клиенты мгновенных сообщений, онлайн с учетной записью пользователя.
Следует отметить, что это может быть или не быть тем, чего вы хотите, нет возможности открыть рабочий стол для настольного клиента. Очевидно, что необходимо отправить присутствие, чтобы мобильный клиент мог его найти, но контакты пользователя также будут отображаться в Интернете (даже если пользователь не будет подписан в свой IM-клиент). Однако отрицательный приоритет будет мешать ему получать сообщения IM.
<!-- Desktop sends: -->
<presence>
<priority>-1</priority>
<your-app xmlns="http://example.com/your-app" type="desktop" />
</presence>
Итак, теперь с точки зрения мобильного клиента ...ему нужно просто подключиться к той же учетной записи, а также отправить подобное присутствие. После отправки своего собственного присутствия он автоматически получит присутствие от контактов, а также других подключений к одной учетной записи, включая соединение с клиентским ПК.
<!-- Mobile sends: -->
<presence>
<priority>-1</priority>
<your-app xmlns="http://example.com/your-app" type="mobile" />
</presence>
<!-- Mobile receives (among other things): -->
<presence from="[email protected]/foo38Bc21e">
<priority>-1</priority>
<your-app xmlns="http://example.com/your-app" type="desktop" />
</presence>
Теперь у вас есть полный JID для настольного клиента.
Он может отправить нормальный XMPP message прямо на полный JID клиента настольного компьютера, как видно из «из» пакета присутствия. В XMPP IM сообщения используют <body>
element в сообщении, чтобы передать текст, однако, вы можете опустить <body>
тег и вставить your own XML data:
<!-- Mobile sends: -->
<message to="[email protected]/foo38Bc21e">
<your-notification xmlns="http://example.com/your-app">
<any-xml-here/>
</your-notification>
</message>
Вы сможете получить это сообщение на рабочем столе почти сразу (наибольшая задержка обычно будет в вашей мобильной сети). Для XMPP на мобильных устройствах также посмотрите на XEP-0286: XMPP on Mobile Devices.