2016-06-20 18 views
0

プロジェクトマネージャの要件として、古い1つのaSmackライブラリではなくxmpp接続にhttps://github.com/igniterealtime/Smackを使用する必要があります。 しかし私が見つけたように、新しいxmppライブラリigniterealtimeはアンドロイドスタジオのIDEユーザーには親切ではありません。プロジェクトでこのライブラリを使用した後は、xmppサーバーに接続できません。android studioのsmack 4.1の使い方は?

質問1:この新しいライブラリを作成するにはどうすればいいですか?

質問2:xmppサーバーに情報クエリパケットを送信する方法、つまり、 "<iq>...</iq>"をサーバーに送信して情報を照会する方法はありますか。

答えて

0

よろしく質問1: まず、変更のアプリレベルのbuild.gradle:

あなたの依存関係のセグメントに以下を追加します。 compile ("org.igniterealtime.smack:smack-android:4.1.0") { exclude group: 'xpp3', module: 'xpp3' } // Optional for XMPPTCPConnection compile ("org.igniterealtime.smack:smack-tcp:4.1.0") { exclude group: 'xpp3', module: 'xpp3' } // Optional for XMPP-IM (RFC 6121) support (Roster, Threaded Chats, …) compile ("org.igniterealtime.smack:smack-im:4.1.0") { exclude group: 'xpp3', module: 'xpp3' }

あなたのリポジトリのセグメントに以下を追加します。 maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } mavenCentral()

プロジェクトには既にigniterealtime xmppライブラリが含まれていますので、今のところそれを使用できます。

XMPPTCPConnectionConfiguration cfg = XMPPTCPConnectionConfiguration.builder() 
    .setServiceName("online.yourdomain.com") 
    .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) 
    .setCompressionEnabled(false) 
    .setDebuggerEnabled(true) 
    .build(); 

    XMPPTCPConnection xmppConnection = new XMPPTCPConnection(cfg); 
    xmppConnection.connect(); 

    if (!xmppConnection.isAuthenticated()) { 
     try { 
      xmppConnection.login(jabberId, yourSessionStr, resourceID); 
     } catch (SmackException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

よろしく質問2:

String XMPP_NAMESPACE = "myapp:notification"; 
    SimpleIQ iq = new SimpleIQ("query", XMPP_NAMESPACE) { 
    @Override 
    protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) { 
     xml.attribute("action", "list"); 
     xml.rightAngleBracket(); 
     xml.element("from", lastDisconnectedTime + ""); 
     return xml; 
    } 
    }; 
    iq.setType(IQ.Type.get); 
    try { 
     xmppConnection.sendPacket(iq); 
    } catch (SmackException.NotConnectedException e) { 
     e.printStackTrace(); 
    } 

PS:私はIQパケットを送信見つかったがasmackを使っほど便利ではありません。ここでIQパケットを送信するための古い方法です。

IQ iq = new IQ() { 
     @Override 
     public String getChildElementXML() { 
      String query = "<query xmlns=\'" + XMPP_NAMESPACE + "\' action=\'list\'>"; 
      query += "<from>" + lastDisconnectedTime + "</from>"; 
      query += "</query>"; 
      return query; 
     } 
    }; 

    iq.setType(Type.GET); 
    xmppConnection.sendPacket(iq); 

予告:私はXMPP接続を確立することはできません、そうでない場合は、XMPPTCPConnectionConfigurationを作成するときにセキュリティモードを無効にする必要があります。このxmppを安全に接続させたい場合は、独自のbks認証ファイルを作成してからxmpp接続で使用する必要があります。

+0

<プッシュのxmlns = 'P1:プッシュ'> <キープアライブ最大= "30" /> <セッション継続時間= "60" /> <ステータスタイプ= "XA">テキストメッセージから= "すべて" グループチャット= "true" を送信するときにプッシュモードで <通知> applepush DeviceToken application1 このタイプのリクエストを作成できますか? @黄从???? ???????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????????????????????? ???????????????????????????????????????????????????????? ????????????????????????????????????????? –

+0

あなたは私のポイントを得ることができますか? –

関連する問題