Как приложение узнает, нормально ли отправлять сообщения XMPP пользователю в App Engine? - PullRequest
2 голосов
/ 16 февраля 2010

Я прочитал этот абзац из документации App Engine десятки раз и до сих пор совершенно не знаю, как работают приглашения в чат:

приглашения

Google Talk и другие чат-серверы будет принимать сообщения только для пользователей которые "подписаны" на отправителя, либо потому, что пользователь пригласил отправитель в чат или потому что пользователь принял приглашение в чат, отправленное Отправитель. Приложение App Engine может отправить приглашения в чат с помощью сервиса API. Как и при отправке электронной почты, лучший практика это отправить приглашение в чат только когда пользователь спрашивает, например, нажав кнопку на веб-странице. Кроме того, приложение может спросить пользователю отправить приглашение XMPP-адрес приложения для включения приема сообщений.

App Engine принимает все чаты приглашения автоматически, и делает не сообщать приглашения на приложение. App Engine будет маршрутизировать все сообщения чата в приложении, независимо от того, является ли отправитель ранее отправил приглашение приложение.

Возможно, проблема в том, что я не использовал чат, поэтому я не знаком с тем, как приглашения работают на практике. Но первая проблема заключается в том, как / почему / нужно ли приложению / получает разрешение на чат с пользователем.

В вышеприведенном абзаце, похоже, говорится следующее:

  1. Приложению требуется разрешение для отправки сообщений XMPP пользователю (, а пользователю необходимо разрешение для отправки сообщений XMPP приложению? ), поэтому
  2. Пользователь должен отправить приглашение в приложение, чтобы разрешить ему отправлять сообщения пользователю (, а приложение должно отправить приглашение пользователю, чтобы разрешить пользователю отправлять сообщения в приложение? )
  3. App Engine получает приглашение в чат, но не передает его приложению

Вопрос: Как приложение узнает, нормально ли отправлять сообщения пользователю, поскольку App Engine действительно сообщает приложению что-либо об ответе пользователя на приглашение?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2010

Gmail - отличный пример:

Я отправляю сообщение своему другу, которого нет в моем «Списке друзей». Gmail не доставляет мое сообщение, а вместо этого доставляет сообщение «Энтони хотел бы пообщаться. Вы принимаете?»

Если мой друг нажимает «да», они получают мое сообщение, и я в их списке друзей, и они в моем списке друзей, и мы можем свободно общаться без Gmail, проверяя, все ли в порядке.

Если мой друг нажимает «нет», он никогда не видит мое исходное сообщение, и GMail спрашивает разрешение, если я попытаюсь снова позже.

Таким образом, приложение поддерживает связь с пользователем на другом конце, оно просто не передает сообщение, только то, что я заинтересован в том, чтобы общаться в чате.

быстрое обновление

Еще один способ взглянуть на это (если вы помните эти дни) - это колл-колл. Оператор просто говорит: «Вы хотите принять звонок от Джонса?» Оператор не говорит: «Он говорит, что это действительно важно, он в тюрьме». И оператор не говорит: «Он сказал нет, в тюрьме можно гнить». Джонс. Они разрывают соединение, и ни одна из сторон не устанавливает реального контакта, пока обе стороны не согласятся.

(Конечно, мы всегда говорили, что нас зовут «Я застрял в торговом центре!», Когда мы пытались позвонить домой, собирать. Но, поскольку нет чата для чата, такие хитрые обходные пути не нужны в XMPP мир.)

1 голос
/ 17 февраля 2010

Используйте функцию get_presence(), чтобы определить, можно ли отправлять пользователю. Если вы отправляете сообщение пользователю, который не принял приглашение, большинство серверов XMPP (включая Google Talk) не будут доставлять ни сообщение, ни автоматическое приглашение. По крайней мере, в Google Talk пользователь, принявший приглашение, будет «присутствовать» даже после выхода из системы, поскольку Gmail может доставлять ваши сообщения XMPP в виде псевдо-писем.

...