ICQクライアントのICQだけでなく

主なことから始めましょう。なぜこの投稿を書いたのですか?



1年以上にわたり、ICQを離れることなくFacebookの友人と通信する機能を実装してきました。 この機能が便利で、便利で、実装しやすいように思われるにもかかわらず、たった1つの非公式ICQクライアントがFacebookにサーバーサポートを追加していません。 おそらく、このトピックに関する短くて理解しやすいHOWTOの発行後に状況は変わるでしょう。 他のIMネットワークには同様の機能はないと控えめに言えます(もちろん、クライアントは2つの異なるサーバーに2つの接続を確立し、2つの異なるプロトコルを処理できますが、クライアントの作成者のほぼすべての作業を行うのは私たちだけです)。



連絡先リスト



そのため、もちろん、最初に、ユーザーは自分のFacebookアカウントをICQ番号に「リンク」する必要があります。



残念ながら、これは手順の最も難しい部分です。これは、ブラウザを起動する必要があるためです(残念ながら、ユーザーは一生に一度それを実行します)。 最も簡単な方法は、リンクhttps://www.icq.com/login/ru?dest=http://lifestream.icq.com/settings/clientsettings?service=facebook&permission=xmppを通常のブラウザーで開くことですが、これはコンポーネントで実行できますアプリケーション内のブラウザ-小さいウィンドウでは、リンクで開くページがきれいに見えます。



Facebookがすでに「接続」されている場合、Facebookの連絡先を受信するには、クライアントはサーバーへのログイン段階でTLV {t = 0x0008、l = 1のSNACパケット[snac-family = 0x0003、snac-type = 0x0002]を送信する必要がありますv = '\ 1'}内部。



 public static final int ICQ_FACEBOOK_SUPPORT = 0x0302; private final BytesBuffer cs_FaceBook_create ( ) { return SNAC_Packet.newSnacPacket ( this, ICQ_FACEBOOK_SUPPORT, Garbage.getBytesBuffer ( ).putWord ( 8 ).putWord ( 1 ).writeByte ( 1 ) ); }
      
      





連絡先Facebookサーバーは、個別のSNACパッケージ[snac-family = 0x0013、snac-type = 0x0008]で送信します。

クライアントは、サーバーからこのパッケージを処理し、解析して、Facebookの連絡先をローカルの連絡先リストに追加する必要があります。



 private final void sc_Roster_Add_received ( final BytesBuffer packet ) { // Debug._trace ( "------sc 1308-------" ); // packet.dump ( ); try { while ( packet.available ( ) > 0 ) { String name = null; String proto = null; final String jid = packet.readPascalUTF8 ( ); // -1363121303@chat.facebook.com final int group = packet.getWord ( ); // 0001 final int id = packet.getWord ( ); // 0003 final int buddy = packet.getWord ( ); // 0000 int len = packet.getWord ( ); // 0023 while ( len > 0 ) { final int t = packet.getWord ( ); final int l = packet.checkWord ( ); if ( t == 0x0131 ) name = packet.readPascalUTF8 ( ); // eg "Alexander Peregudov" else if ( t == 0x0084 ) proto = packet.readPascalUTF8 ( ); // "facebook" magic string else { Debug._trace ( "unknown tlv type=" + t + " len=" + l ); packet.skip ( l + 2 ); } len -= 4 + l; } if ( buddy == 0 && StringCache.EqualsTo ( ASCII_CS_FACEBOOK_PROTO, proto ) ) { // Debug._trace ( "got FACEBOOK contact name='" + name + "' proto='" + proto + "' jid='" + jid + "' group=" + group + " id=" + id + " buddy=" + buddy); final ICQ_Group igroup; if ( (igroup = findGroup ( group )) != null ) igroup.add ( new ICQ_Contact ( this, id, group, jid, name, false ) ); else Debug._trace ( "WARNING! no group for " + name + ". - skipped" ); } } } catch ( final Throwable x ) { x.printStackTrace ( ); } }
      
      





Facebookの連絡先でのさらなる作業は、通常のICQの連絡先での作業に似ています。 メッセージの送信およびその他のアクションは標準パッケージを使用して実行され、追加のプログラミングは不要です。



Facebookがジャバーをどのように実装したかについてのいくつかの言葉。 最も重要なのは、jabberのステータスがサイトのステータスと同期している場合です。 もちろん、XMPPプロトコルに適しているため、すべてのメッセージはFacebookサーバーを一元的に通過し、メッセージ履歴はクライアントに保存されます。 メッセージは即座に、遅滞なく送信されます。

スパム対策に関しては、Facebookの側で実装されており、私たちが知る限り、使用される唯一のフィルターは、友達だけが互いにメッセージを送信できることです。



Facebookはほとんどの連絡先リストの管理操作をサポートしていないため、制限に関する小さな免責事項を示します。 最後になりましたが、重要なヒント:

いつものように、コメントで追加の質問に答える準備ができています。



All Articles