1

バックエンドとしてdjangoを使用するiOSアプリを作成しています。ユーザー間のチャット機能が必要です。

XMPPはリアルタイム通信に適していると聞き、ejabberdをXMPPサーバーとして正常にセットアップしました。しかし、それでも詳細を処理するのに苦労しています。
最初にアプリを作成し、次にチャット機能を作成したため、ejabberdをセットアップする前に、djangoDBに既にユーザーがいます。既存のDBに対してユーザーを認証するにはejabberdが必要ですが、外部認証を使用することでこれをほぼ解決しました。ejabberdはusername@abc.comのようなjabberIDを必要とするようで、ここではabcであるため、小さな問題が1つだけあります。ejabberdの仮想ホストを意味します。サーバー上で1つの仮想ホスト(ドメイン名)しか使用できないのではないかと思いますか?しかし、最初に、もちろん異なるドメイン(gmail.com、yahoo.comなど)からのメールを使用して登録するようにユーザーに依頼しましたが、username @ gmail.com @ abc.comは有効なジャバーIDではないため、おそらく1つです。ここでできる小さなトリックは、最初に@を#に変換し、バックエンドのpythonスクリプトで適切に処理することです。しかし、多分私はそれを完全に間違っていましたか?

もう1つの問題は、ユーザープロファイルに関するものです。表示名やアバターのURLなどのユーザー情報もdjangoDBに保存しました。これらの情報をXMPPサーバーから取得したい場合は、vCardモジュールを使用できることを学びました。それで、多分私は2つの場所で重複した情報を持っている必要がありますか?それでも、DBからejabberdにユーザー情報を同期する方法がわかりません。または、ソースが1つだけで、それがDBであり、iOSクライアントが必要なときにいつでもバックエンドから情報を照会できるのでしょうか。

XMPPのセットアップは簡単ではないと思いますが、アプリで使用するのは本当に人気がありますか?特にチャットがアプリの主な機能ではなく、多数のユーザーからの膨大なメッセージを期待していない場合はどうでしょうか。

4

1 に答える 1

1

あなたが書いた:

ただし、username @ gmail.com@abc.comは有効なジャバーIDではありません

ユーザーID(つまり、「username @ gmail」)をエスケープすることになっています。

XEP 106は、JIDのノード部分をエスケープする方法を説明しています。

Pythonでは、次のようになります。

def escape_node(node):
    """ """
    node.strip()
    node = node.replace('\\', "\\5c")
    node = node.replace(' ',  "\\20")
    node = node.replace('\"', "\\22")
    node = node.replace('\&', "\\26")
    node = node.replace('\'', "\\27")
    node = node.replace('\/', "\\2f")
    node = node.replace(':',  "\\3a")
    node = node.replace('<',  "\\3c")
    node = node.replace('>',  "\\3e")
    node = node.replace('@',  "\\40")
    return node

Djangoでのユーザーの詳細の保存に関して。DjangoユーザーをXMPPに登録するときは、ユーザーに有効なvCardも登録していることを確認してください。

Djangoユーザーが詳細を変更したら、vCardも更新します。

于 2012-11-26T14:52:35.640 に答える