通过令牌使用身份验证时,收件人ID不能为null或为空

时间:2019-08-08 18:59:01

标签: quickblox quickblox-android

在我们基于quickblox的SDK中,应用程序通过令牌进行了身份验证。

QBSessionManager.getInstance().createActiveSession(token, DateTime.now().plusHours(2).toDate())

大多数应用程序部件都可以正常工作,但是我无法收到消息。 当我订阅邮件时

fun onIncomingMessage(dialog: QBChatDialog) = Flowable.create<QBChatMessage>({ emitter ->
        val chatService = QBChatService.getInstance()
        dialog.initForChat(chatService)
        chatService.incomingMessagesManager.addDialogMessageListener(object : QBChatDialogMessageListener {
                override fun processMessage(id: String, message: QBChatMessage, p2: Int?) {
                    Timber.d("dialogId: ${dialog.dialogId}, processMessageId: $id")
                    if(dialog.dialogId == id) emitter.onNext(message)
                }

                override fun processError(dialogId: String, e: QBChatException, message: QBChatMessage, p3: Int?) {
                    emitter.onError(e)
                }
            })


    }, BackpressureStrategy.BUFFER)

我发现了错误:

2019-08-09 01:46:30.011 10650-10650/com.myapp.debug E/ChatRoomViewModel$observeMessages: java.lang.IllegalArgumentException: Recipient ID can't be null or empty
        at com.quickblox.chat.model.QBChatDialog.initForChat(Unknown Source:38)

我在源代码中看到了

public class QBChatDialog extends QBEntity {

// ...

    public Integer getRecipientId() {
        if (this.getType() == QBDialogType.PRIVATE && !CollectionsUtil.isEmpty(this.occupantsIds)) {
            Iterator var1 = this.occupantsIds.iterator();

            Integer userId;
            do {
                if (!var1.hasNext()) {
                    return -1;
                }

                userId = (Integer)var1.next();
            } while(this.chatService.getUser() == null || userId.equals(this.chatService.getUser().getId()));

            return userId;
        } else {
            return -1;
        }
    }

// ...
}

由于QBChatService没有userId而出现了问题,并且手册中描述的正确获取userId的唯一方法是初始化QBChatService使用登录/密码验证方法。

// Initialise Chat service
QBChatService chatService = QBChatService.getInstance();

final QBUser user = new QBUser("garrysantos", "garrysantospass");
QBAuth.createSession(user, new QBEntityCallback<QBSession>() {
    @Override
    public void onSuccess(QBSession session, Bundle params) {
        // success, login to chat

        user.setId(session.getUserId());

        chatService.login(qbUser, new QBEntityCallback() {
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError(QBResponseException errors) {

            }
        });
    }

    @Override
    public void onError(QBResponseException errors) {

    }
});

但是我还有另一个身份验证方法。它是什么?设计错误或未描述功能?有没有人与quickblox合作过很多,请告诉我如何解决此问题。谢谢。

0 个答案:

没有答案