Слушатель сообщений чата QuickBlox

Я использую 2.1.1 Android SDK и хочу уведомлять пользователя о новых входящих сообщениях, полученных приложением.

Вот в чем проблема. Я хотел бы уведомить пользователя, когда он запускает приложение, поэтому я хотел бы добавить прослушиватель на этапе «входа пользователя», как показано во фрагменте:

        QBAuth.createSession(user, new QBEntityCallbackImpl<QBSession>() {
        @Override
        public void onSuccess(QBSession session, Bundle args) {
            // login to Chat
            chatService.login(user, new QBEntityCallbackImpl() {
                @Override
                public void onSuccess() {
                    HERE I WOULD LIKE A CODE TO START LISTEN FOR ALL INCOMING MESSAGES

Согласно http://sdk.quickblox.com/android/com/quickblox/chat/listeners/QBMessageListenerImpl.html для запуска слушателю требуется чат QBChat. Но я хотел бы слушать все сообщения, а не только в конкретном чате.

Короче говоря, как реализовать прослушиватель сообщений, чтобы перехватывать все сообщения, адресованные вошедшему в систему пользователю?


person NBayaman    schedule 19.03.2015    source источник
comment
пожалуйста, поделитесь кодом, если вы найдете решение.   -  person Naveen Kumar    schedule 02.04.2015


Ответы (1)


@Навин Кумар

В моей начальной активности я запускаю прослушиватель, чтобы перехватить соединение XMPP.

    private void XMPPConnectionListener() {
    XMPPConnection.addConnectionCreationListener(new ConnectionCreationListener() {

        @Override
        public void connectionCreated(XMPPConnection connection) {
            GlobalVar.XMPPConn = connection;
            ChatHelper.idleMessageListener(StartActivity.this);

        }
    });

}

Затем я использую GlobalVar.XMPPConn для перехвата пакетов и их разбора:

    public static void idleMessageListener(final Activity activity) {
    PacketListener myListener = new PacketListener() {
        public void processPacket(final Packet packet) {
            final Integer userID = Integer.parseInt(returnIDFromPacket(packet.getFrom()));
            final String body = returnBodyFromPacket(packet.toString());
            if (!GlobalVar.currentOpponent.equals(userID) && !body.isEmpty()) {
                activity.runOnUiThread(new Runnable() {
                    public void run() {
                        QBUsers.getUser(userID, new QBEntityCallbackImpl<QBUser>() {
                            @Override
                            public void onSuccess(final QBUser user, Bundle args) {
                                sendNotification(activity, user, body);
                            }

                            @Override
                            public void onError(List<String> errors) {
                                Log.d(TAG, errors.toString());
                            }
                        });
                    }
                });

            }
        }
    };
    PacketFilter filter = new MessageTypeFilter(Message.Type.chat);

    if (GlobalVar.XMPPConn != null) {
        GlobalVar.XMPPConn.addPacketListener(myListener, filter);
    }
}

Таким образом, логика заключается в том, чтобы перехватить соединение, запущенное QuickBlox, а затем подключить к нему прослушиватель пакетов.

person NBayaman    schedule 03.04.2015
comment
не могли бы вы объяснить код немного больше? Поскольку я не понимаю, что означает GlobalVar или как вы вызываете XMPPConnectionListener и т. д., объясните подробнее код. - person Kamalakannan J; 29.07.2015