【问题标题】:Quickblox 1:1 chat dialog is not openingQuickblox 1:1 聊天对话框未打开
【发布时间】:2018-04-06 11:04:58
【问题描述】:

我成功配置了 quickblox,创建了会话和登录用户工作完美。 但是当我们创建聊天对话框时,它什么也不做。

final QBChatDialog dialogToCreate = new QBChatDialog();
    dialogToCreate.setName("xxx xxx ");
    dialogToCreate.setType(QBDialogType.PUBLIC_GROUP);
    dialogToCreate.setUserId(xxx1);

    ArrayList<Integer> occupantsIds = new ArrayList<Integer>();
    occupantsIds.add(xxx1);
    occupantsIds.add(xxx2);
    dialogToCreate.setOccupantsIds(occupantsIds);


    QBRestChatService.createChatDialog(dialogToCreate).performAsync(new QBEntityCallback<QBChatDialog>() {
        @Override
        public void onSuccess(QBChatDialog qbChatDialog, Bundle bundle) {
            qbChatDialog.initForChat(qbChatDialog.getDialogId(), QBDialogType.PUBLIC_GROUP, QBChatService.getInstance());
        }

        @Override
        public void onError(QBResponseException e) {

        }
    });

我在这个应用程序中找到的最后一个日志如下:

                                                          '{"session":{"application_id":69154,"created_at":"2018-04-06T10:51:59Z","id":670583149,"nonce":-590011862,"token":"91d65e64a26f33f20dc7d06ec9fb41f111010e22","ts":1523011917,"updated_at":"2018-04-06T10:51:59Z","user_id":44771703,"_id":"670583149"}}'
  • QBSessionListener onSessionCreated: WITH USER
  • D/QBASDK:订阅服务:subscribeToPushesAutomatic
  • D/QBASDK:QBSessionListener onSessionUpdated
  • D/QBASDK:订阅服务:subscribeToPushesAutomatic
  • D/QBASDK:订阅服务:订阅服务已创建
  • D/QBASDK:订阅服务:onHandleIntent 开始:注册到推送 7。
  • D/QBASDK:SubscribeService:您的元数据未设置,无法自动推送订阅
  • D/QBASDK:SubscribeService:onHandleIntent start:注册推送
  • D/QBASDK:订阅服务:您的元数据未设置,自动推送 订阅无法 D/QBASDK:SubscribeService:Service onDestroy

请建议如何打开聊天对话框?

【问题讨论】:

  • 添加您的build.gradle
  • 您的 onError(QBResponseException e) 方法为空。尝试在那里登录,看看是否收到任何错误消息
  • 实现 "com.quickblox:quickblox-android-sdk-chat:3.8.1" 实现 "com.quickblox:quickblox-android-sdk-content:3.8.1" 实现 "com.quickblox: quickblox-android-sdk-messages:3.8.1" 实现 "com.quickblox:quickblox-android-sdk-customobjects:3.8.1"

标签: android chat quickblox


【解决方案1】:

首先,确保您在清单文件中添加了以下服务和元数据:

<service
 android:name="com.quickblox.messages.services.gcm.QBGcmPushInstanceIDService"
 android:exported="false">
        <intent-filter>
            <action android:name="com.google.android.gms.iid.InstanceID" />
        </intent-filter>
</service>

<meta-data
        android:name="com.quickblox.messages.TYPE"
        android:value="GCM" />
<meta-data
        android:name="com.quickblox.messages.SENDER_ID"
        android:value="@string/sender_id" />
<meta-data
        android:name="com.quickblox.messages.QB_ENVIRONMENT"
        android:value="DEVELOPMENT" />

那么,在创建对话之前你必须创建对手列表:

    ArrayList<QBUser> qbUserList = new ArrayList<QBUser>();
    QBUser qbUser = new QBUser();
    qbUser.setId(524618);
    qbUser.setFullName("test");

    qbUserList.add(qbUser);
    qbUserList.add(QBChatService.getInstance().getUser()); 

那么在你调用这个方法之后:

QBRestChatService.createChatDialog(QbDialogUtils.createDialog(users)).performAsync(
            new QbEntityCallbackWrapper<QBChatDialog>(callback) {
                @Override
                public void onSuccess(QBChatDialog dialog, Bundle args) {
                    initForChat(dialog); // here i created one method that init chat from dialog
                    super.onSuccess(dialog, args);
                }
            });

在此之前,请确保您在 oncreate 类中创建了 QBChatService:

chatService = QBChatService.getInstance();

初始化聊天方法:

private void initForChat(QBChatDialog dialog){
 dialog.initForChat(chatService);

 //make sure you defined private ConnectionListener chatConnectionListener; 
chatConnectionListener = new VerboseQbChatConnectionListener(getSnackbarAnchorView()) {
        @Override
        public void reconnectionSuccessful() {
            super.reconnectionSuccessful();

            switch (qbChatDialog.getType()) {
                case GROUP:
                    chatAdapter = null;
                    // Join active room if we're in Group Chat
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            joinGroupChat();
                        }
                    });
                    break;
            }
        }
    };
}

群聊方式:

private void joinGroupChat() {

    ChatHelper.getInstance().join(qbChatDialog, new QBEntityCallback<Void>() {
        @Override
        public void onSuccess(Void result, Bundle b) {

            loadDialogUsers();
        }

        @Override
        public void onError(QBResponseException e) {

        }
    });
}

然后加载对话用户:

private void loadDialogUsers() {
    ChatHelper.getInstance().getUsersFromDialog(qbChatDialog, new QBEntityCallback<ArrayList<QBUser>>() {
        @Override
        public void onSuccess(ArrayList<QBUser> users, Bundle bundle) {

        }

        @Override
        public void onError(QBResponseException e) {

        }
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多