QuickBlox чат получил сообщение не звонит

Я столкнулся с проблемой, когда я не получаю сообщения во время чата в группе типа QBChatDialogTypePublicGroup. Однако я могу видеть в журналах, что сообщение приходит ко мне. Согласно объяснению на официальном сайте quickblox, следующий метод должен вызываться при получении сообщения

- (void)chatRoomDidReceiveMessage:(QBChatMessage )message fromDialogId:(NSString )dialogId
- (void)chatDidNotSendMessage:(QBChatMessage )message toDialogId:(NSString )dialogId error:(NSError *)error

Но ни один из вышеперечисленных делегатов не звонит.

Вот шаги, которые я предпринял -


Для входа в систему:-


[QBRequest logInWithUserLogin:[[AppDelegate sharedAppDelegate]getQBUserInstance].login password:[[AppDelegate sharedAppDelegate]getQBUserInstance].password successBlock:^(QBResponse response, QBUUser user) {

    NSLog(@"quickblox user id is %lu", (unsigned long)user.ID);
    [[NSUserDefaults standardUserDefaults] setValue:[NSString stringWithFormat:@"%lu", (unsigned long)user.ID]forKey:@"QuickbloxUserID"];

    [[AppDelegate sharedAppDelegate]getQBUserInstance].ID=user.ID; 

    // set Chat delegate
    [[QBChat instance] addDelegate:self];

    // login to Chat
    [[QBChat instance] loginWithUser:[[AppDelegate sharedAppDelegate]getQBUserInstance]];


} errorBlock:^(QBResponse *response) {

    // error handling
    NSLog(@"error: %@", response.error);
}];


-(void) chatDidLogin{

    [QBChat instance].keepAliveInterval = 30;
    [QBChat instance].autoReconnectEnabled = YES;
    [QBChat instance].streamManagementEnabled = YES;

    NSLog(@"You have successfully signed in to QuickBlox Chat");

    [MyNetWorking endHud];
    FMTabBarController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"tabView"];
    [AppDelegate sharedAppDelegate].window.rootViewController=vc;

    //[self presentViewController:vc animated:YES completion:nil];
}


- (void)chatDidNotLoginWithError:(NSError *)error{
    NSLog(@"You have successfully signed in to QuickBlox Chat %@", error.domain);
    NSLog(@"You have successfully signed in to QuickBlox Chat %@", error.userInfo);
    NSLog(@"You have successfully signed in to QuickBlox Chat %@", error.localizedDescription);
}


- (void)chatDidConnect{
    NSLog(@"You have successfully signed in to QuickBlox Chat");
}


- (void)chatDidAccidentallyDisconnect{
    NSLog(@"You have successfully signed in to QuickBlox Chat");
}


- (void)chatDidReconnect{
    NSLog(@"You have successfully signed in to QuickBlox Chat");
}

Чтобы присоединиться к группе, я использовал следующий код


groupChatDialog = [[QBChatDialog alloc] initWithDialogID:self.groupChatID type:QBChatDialogTypePublicGroup];
NSLog(@"Chat dialog %@", [QBChat instance].delegates);

// [[QBChat instance] addDelegate:self];
// NSLog(@"Chat dialog %@", [QBChat instance].delegates);

[groupChatDialog setOnJoin:^() {
    [[[UIAlertView alloc] initWithTitle:@"FM" message:@"Group Joined Successfully" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:@"Cancel", nil] show];
}];

[groupChatDialog setOnJoinFailed:^(NSError *error) {
    [[[UIAlertView alloc] initWithTitle:@"FM" message:error.localizedDescription delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:@"Cancel", nil] show];
    NSLog(@"Error is %@", error);

}];
[groupChatDialog join];

************************************************************
To fetch previous chat I have used the following code
************************************************************

QBResponsePage *resPage = [QBResponsePage responsePageWithLimit:20 skip:0];

[QBRequest messagesWithDialogID:self.groupChatID extendedRequest:nil forPage:resPage successBlock:^(QBResponse response, NSArray messages, QBResponsePage *responcePage) {

    NSLog(@"messages are %@", messages);
    [arrayChat addObjectsFromArray:messages];
    [self.tableView reloadData];

} errorBlock:^(QBResponse *response) {
    NSLog(@"error: %@", response.error);
}];

Для отправки сообщения я использовал следующий код


messageToSent = [QBChatMessage message];

[messageToSent setText:_textField.text];
[messageToSent setDateSent:[NSDate date]];

NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"save_to_history"] = @YES;
[messageToSent setCustomParameters:params];
[groupChatDialog sendMessage:messageToSent];

_textField.text = @"";
[arrayChat addObject:messageToSent];
[_tableView reloadData];

После этого я ожидаю вызова следующих методов


- (void)chatRoomDidReceiveMessage:(QBChatMessage )message fromDialogId:(NSString )dialogId{
    NSLog(@"message is %@", message);
}

- (void)chatDidNotSendMessage:(QBChatMessage )message toDialogId:(NSString )dialogId error:(NSError *)error{
    [[[UIAlertView alloc] initWithTitle:@"FM" message:error.localizedDescription delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:@"Cancel", nil] show];
    NSLog(@"Error is %@", error);
}

Но они не получают вызов, однако они должны быть вызваны в соответствии с объяснением на веб-сайте. Пожалуйста, дайте мне знать, что мне здесь не хватает или что я здесь делаю неправильно.

2 ответа

сначала убедитесь, что вы установили делегата QBChat, чтобы установить код использования ниже

      QBChat.instance.addDelegate(self)

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

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

*Свифт-код

      QBChat.instance.connect(withUserID: "user_id",
                            password: "password",
                            completion: { [weak self] error in
        guard let self = self else { return }
        if let error = error
            print("Error occured while connecting to chat")
        } else {
            print("successfully connected to chat.")
            self.onCompleteAuth?()
        }
    })

Примечание: соединение с чатом может быть потеряно по некоторым причинам, 1. потеряно соединение с интернетом, 2. приложение перешло в фоновый режим или было заблокировано. 3. если вы представляете такие контроллеры, как UIImagePickerController, Camera, UIDocumentPickerController и т. д.

Подробнее о потере соединения в quickblox

Правильный метод

-(void) chatRoomDidReceiveMessage:(QBChatMessage *)message fromDialogID:(NSString *)dialogID

Не fromDialogId

Другие вопросы по тегам