【问题标题】:smack 4.1 Openfire Sample example [closed]smack 4.1 Openfire 示例示例 [关闭]
【发布时间】:2014-11-23 20:31:44
【问题描述】:

我一直在为我的门户网站使用 smack 3.4。还为我的 android 应用程序使用了 asmack 3.4 (aSmack 开发在几年前就停止了,但是我使用了一些非官方的 jar。面临文件上传和群聊问题,因此想要升级到官方 smack,因为它现在具有 Android 原生支持)。

但是现在 smack 有一个更新,他们已经迁移到 4.1(集成了安卓原生):

https://github.com/igniterealtime/Smack/wiki/Smack-4.1-Readme-and-Upgrade-Guide.

所以我正在寻找一些代码示例/示例项目/代码 sn-p 与 SMACK 4.1 alpha 与 android/web 集成。 请提供一些有用的链接。

还有关于进行/不进行此升级的建议。由于 smack 4.1 仍未发布。

谢谢。

【问题讨论】:

  • “aSmack 开发在几年前就停止了,但是我使用了一些非官方的 jars”- 不正确,aSmack 开发是活跃的,并且提供了官方 jars。

标签: openfire smack


【解决方案1】:

使用 SSL 的连接示例 (smack-4.1.0-beta2-SNAPSHOT-2015-02-01):

    XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder();
    config.setSecurityMode(ConnectionConfiguration.SecurityMode.required);
    //For OLD STYLE SSL
    //config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
    config.setUsernameAndPassword(USERNAME + "@" + DOMAIN, "PASSWORD");
    config.setServiceName(DOMAIN);
    config.setHost(DOMAIN);
    config.setPort(PORT);
    config.setDebuggerEnabled(true);
    //OLD STYLE SSL
    //config.setSocketFactory(SSLSocketFactory.getDefault());

    try {
        SSLContext sc = SSLContext.getInstance("TLS");
        MemorizingTrustManager mtm = new MemorizingTrustManager(ctx);
        sc.init(null, MemorizingTrustManager.getInstanceList(ctx), new SecureRandom());
        config.setCustomSSLContext(sc);
        config.setHostnameVerifier(mtm.wrapHostnameVerifier(new org.apache.http.conn.ssl.StrictHostnameVerifier()));
    } catch (NoSuchAlgorithmException | KeyManagementException e) {
        throw new IllegalStateException(e);
    }

    mConnection = new XMPPTCPConnection(config.build());
    mConnection.setPacketReplyTimeout(10000);

    try {
        mConnection.connect();
        mConnection.login();
    } catch (SmackException | IOException | XMPPException e) {
        e.printStackTrace();
    }

聊天创建示例:

           final ChatManager chatManager = ChatManager.getInstanceFor(mConnection);
            chatManager.addChatListener(new ChatManagerListener() {
                @Override
                public void chatCreated(Chat chat, boolean b) {
                    chat.addMessageListener(new ChatMessageListener() {
                        @Override
                        public void processMessage(Chat chat, Message message) {
                            mServerResponse.gotMessage(message.getBody());
                            Log.d(TAG, message.toString());
                        }
                    });
                }
            });

            Chat chat2 = chatManager.createChat(USERNAME + "@" + DOMAIN);
            try {
                chat2.sendMessage("text");
            } catch (SmackException.NotConnectedException e) {
                e.printStackTrace();
            }

【讨论】:

  • Android Studio 说我无法解析 MemorizingTrustManager,我的目标是 4.1.4 版(smack-java7、smack-tcp 和 smack-im),我错过了什么吗?除了 smack 我还应该使用其他东西吗?
  • @Alexey 我们如何获得我们创建为 alist 的所有Chat 。是否有内置方法或者我们必须为其创建自定义 API?
猜你喜欢
  • 2015-05-11
  • 2015-08-04
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 2014-11-16
  • 2012-08-14
  • 2012-01-19
  • 2010-10-17
相关资源
最近更新 更多