2011-10-21 11 views
1

私はasmackを使ってAndroid上に簡単なXMPPアプリケーションを作成しようとしていますが、いくつかのジャバーサーバにログインできないという問題が発生しました。たとえば、テスト用のOpenfireサーバーにログインすることはできませんが、コードはjabber.orgのアカウントで正常に動作します。Asmack/Openfire 401エラー

ログインコード:

public void login() throws XMPPException 
{ 
    if (connection != null && connection.isConnected()) 
    { 
     try 
     { 
      Random generator = new Random(); 
      int resource_int = generator.nextInt(); 
      connection.login(USERNAME, PASSWORD, 
          "Smack_" + Integer.toString(resource_int)); 
     } 
     catch (XMPPException e) 
     { 
      e.printStackTrace(); 
      connection.disconnect(); 
      setConnection(null); 
      throw e; 
     } 
     Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.accept_all); 
    } 
} 

私が言ったように、それはjabber.orgで動作しますが、Openfireはnot-authorized(401)エラーを返します。どうすれば修正できますか?

+0

ログイン時にリソースパラメータを削除してみます。 – Maggie

答えて

0

私はOpenfireを一度も使用していませんが、どこかにログファイルがあると確信しています。投稿できますか?

AndroidのIIRC一部のセキュリティ機能(SSLまたはTLSの場合はわからない)はSmackまたはAsmackと互換性がありません。多分問題です。この場合、Smackに含まれているSSL機能の代わりに、独自のSocket接続を使用して解決する方法があります。これを確認するには、(XMPP関連の)コードをPCに移植し、Standard Smack Libraryを使用します。

もう1つのポイントは、Android用のスマートポートが異なることです。私は個人的にBeemプロジェクトのAsmackポートを使用しています(Asmackがいくつかの問題を抱えていたためですが、どれが問題か分かりませんでした)。

+0

彼の問題は、それが1つのサーバでは動作しますが、他のサーバでは動作しないということです。どちらの場合でも失敗する可能性は低いので、クライアント側の問題ではありません。 – Robin

+1

必ずしもそうではないかもしれません...サーバには異なるログインメカニズムが必要かもしれません。 Asmackでは、デバッグモード( 'ConnectionConfiguration.setDebuggerEnabled(bool)')を有効にして、LogCatのスタンザをトレースすることができます。 –

0

OpenFireサーバーで同じアカウントとパスワードを使用してもよろしいですか?既存のXMPPクライアントと同じユーザー名とパスワードを使用してサーバーにログインしてみてください。方程式からAndroidを取り出し、まず両方のサーバーにログインできることを確認してください。