在我们基于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合作过很多,请告诉我如何解决此问题。谢谢。