2011-08-16 8 views
3

誰かが重複を叫ぶ前に、私はStackOverflowにここに投稿されている質問のどれも私を始められなかったと言いたいと思います。Android用のFacebookチャットクライアントを本当に作成する方法は?

私は現在、Android用の簡単なFacebookチャットクライアントを作成することになっています。基本的には、ログインしてオンラインの連絡先が誰かを確認してから、メッセージを送受信します。私は前にこのようなことをしたことがないので、XMPPを学び、http://developers.facebook.com/appsにアプリを作成しようと試みたので、すべての認証用のAPIキーを取得できます。しかし、XMPPとasmack、そしてGraph and Chat APIの5つの悲惨な研究の後、私はこれらのクラスとSASLAuthenticationクラスをすべて調べる必要はなく、APIキーを取得する必要はないと言われました。私がやらなければならなかったのは、X-FACEBOOK-PLATFORMメカニズム(私がすでに読んできたウェブの関連文書すべて)を使って、[email protected]に直接メッセージを送ることでした。しかし、それがJavaやAndroidでどのようにコード化されているかについての良い、完全なガイドはない。

スタートガイドasmackはこれとどのように関係がありますか?私はasmackを使用する必要があり、SASLAuthenticationが必要ない方法を完全に得られません。ありがとう。

+0

まあ私はFacebookが既にAndroidとiPhone用のオフチャットチャットアプリを開始したと思います。 http://blog.facebook.com/blog.php?post=10150249543542131 – AppleGrew

+0

を参照してください。わたしは、サディスティックな上司の見物の喜びのために、とにかくそれをやるように任されています。 –

+0

この回答を確認してくださいhttp://stackoverflow.com/a/11238124/1472665、それは新しいFacebookチャットクライアントを作成するのに役立ちます – Dipali

答えて

1

ほんの少しの情報です。

  • asmackは、Androidプラットフォームでスマックを使用できるように特別に設計されたSmackのフォークです。
  • Smackは、XMPPのクライアントライブラリです。これはFBユーザーとチャットする方法です。
  • SASLAuthenticationは、単にXMPP内でXMPPサーバーにログインするために使用される認証手段です。あなたの場合、このサーバーはFBです。

Smackを使用してFBに接続する場合は、discussion thread at Ignite Realtimeがあります(実際にはsearchの場合はいくつかあります)。

私は、asmackがもはや維持/開発されていないところを読んでいると思います。私は、ほとんどの開発者が、Android上で動作するようにSmackソースを少し調整していると思います。

0

あなたの上司について聞いて悲しいです。 XMPPを理解しようとしないでください。 FBには独自のチャット用APIがあります。 Read http://developers.facebook.com/docs/chat/

+0

ああ、いいえ、そのリンクはもう一度ないです。私はPythonがAndroidに変換されていることを理解する必要があると思うでしょうか? –

+0

私の悪い。私はそれを慎重に読んだことはありません.FBは確かにXMPPを使用しているようです。 – AppleGrew

1

あなたが名簿を使用してオンラインの友達をフェッチserver..andと接続するXmppConnectionを使用することができます。.. ここでは、接続のログインや友人に を取得していないメインUIスレッドで非同期タスクでこのコードを使用するいくつかのコードです。 。

ConnectionConfiguration connConfig = new ConnectionConfiguration("chat.facebook.com", 5222 , "chat.facebook.com"); 
    connConfig.setSASLAuthenticationEnabled(true); 
    connConfig.setSecurityMode(SecurityMode.required); 
    connConfig.setRosterLoadedAtLogin(true); 
    connConfig.setSendPresence(false); 
    connection = new XMPPConnection(connConfig); 

    try 
    { 
     connection.connect(); 
     Log.i("XMPPClient", "[SettingsDialog] Connected to " + connection.getHost()); 
    } 
    catch (XMPPException ex) 
    { 
     Log.e("XMPPClient", "[SettingsDialog] Failed to connect to " + connection.getHost()); 

     XMPPLogic.getInstance().setConnection(null); 
    } 

    try 
    { 
     connection.login(username, password); 
     try 
     { 
      Thread.sleep(time); 
     } 
     catch (InterruptedException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     Log.i("XMPPClient", "Logged in as " + connection.getUser()); 

     // Set the status to available 
     Presence presence = new Presence(Presence.Type.available); 
     connection.sendPacket(presence); 

     XMPPLogic.getInstance().setConnection(connection); 
     Roster roster = connection.getRoster(); 
     Collection<RosterEntry> entries = roster.getEntries(); 
     ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp", new VCardProvider()); 

     Log.i("Roster", "Roster Connected"); 
     Log.i("Entries", "\n\n" + entries.size() + " buddy(ies):"); 

     for (RosterEntry entry : entries) 
     { 

      if (roster.getPresence(entry.getUser()).isAvailable()) 
      { 


      HashMap<String, Object> contact = new HashMap<String, Object>(); 
      contact.put(NAME, entry.getName()); 
      contact.put(USERID, entry.getUser()); 
      datatList.add(contact); 

      Log.i("TAG", entry.getName() + entry.getUser()); 
      Log.i("Contact", contact.toString()); 

      } 

     } 



    } 
    catch (XMPPException ex) 
    { 
     Log.e("XMPPClient", "[SettingsDialog] Failed to log in as " + username); 

     XMPPLogic.getInstance().setConnection(null); 
    } 
関連する問題