chatDidReceiveMessage method not called QuickBlox

前端 未结 2 1963
孤街浪徒
孤街浪徒 2021-01-21 19:00

I am using QuickBlox-iOS SDK for chatting. Login/Signup is working perfectly. Also I am able to send message but the delegate method

- (void)chatDidR

2条回答
  •  鱼传尺愫
    2021-01-21 19:50

    I don't understand why you're using the [QBRequest createMessage:successBlock:errorBlock:] method to send messages to another user.

    For me what always worked was to create a chatDialog with the user you're trying to message, like so:

    QBChatDialog *dialog = [[QBChatDialog alloc] initWithDialogID:nil 
                                                             type: QBChatDialogTypePrivate];
    dialog.occupantIDs = @[@([Global instance].QBUserID), 
                           @([Global instance].currentUser.user.ID)];
    

    Afterwards, you can call Quickblox method to create the dialog on the servers:

    if (dialog.ID == nil) {
        [QBRequest createDialog:dialog successBlock:^(QBResponse *response, QBChatDialog *createdDialog) {
    
            [self sendMessageToDialog: dialog withText:@"Hello friend!"];
    
        } errorBlock:^(QBResponse *response) {
            NSLog(@"dialog creation err: %@", response);
        }];
    }
    

    Create the message:

    - (QBChatMessage *) createMessageWithText: (NSString *)text andDialog: (QBChatDialog*)dialog {
        QBChatMessage *message = [QBChatMessage message];
        message.text = text;
        message.senderID = [Global instance].currentUser.ID;
        message.markable = YES;
        message.deliveredIDs = @[@([Global instance].currentUser.ID)];
        message.readIDs = @[@([Global instance].currentUser.ID)];
        message.dialogID = dialog.ID;
        message.dateSent = [NSDate date];
        message.recipientID = dialog.recipientID;
        message.customParameters = [NSMutableDictionary dictionary];
    
        message.customParameters[kQMCustomParameterDialogID] = dialog.ID;
        message.customParameters[kQMCustomParameterDialogType] = [NSString stringWithFormat:@"%lu",(unsigned long)dialog.type];
        message.customParameters[@"application_id"] = @"";
        message.customParameters[@"save_to_history"] = @"1";
    
        if (dialog.lastMessageDate != nil){
            NSNumber *lastMessageDate = @((NSUInteger)[dialog.lastMessageDate timeIntervalSince1970]);
            message.customParameters[kQMCustomParameterDialogRoomLastMessageDate] = [lastMessageDate stringValue];
        }
        if (dialog.updatedAt != nil) {
            NSNumber *updatedAt = @((NSUInteger)[dialog.updatedAt timeIntervalSince1970]);
            message.customParameters[kQMCustomParameterDialogRoomUpdatedDate] = [updatedAt stringValue];
        }
    
        return message;
    }
    

    And then send the message to the dialog:

    - (void) sendMessageToDialog: (QBChatDialog *)dialog withText: (NSString *)text {
    
        QBChatMessage *message = [[ChatService shared] createMessageWithText:text andDialog:self.dialog];
    
        [dialog sendMessage:message completionBlock:^(NSError * _Nullable error) {
            if (error != nil) {
                NSLog(@"error creating message %@", error);
            } else {
                NSLog(@"message sent!");
            }
        }];
    }
    

    I think following this flux you'll be able to receive the callback through the delegate.

    EDIT - I forgot to mention the consts I used in the code above are:

    NSString const *kQMCustomParameterDialogID = @"dialog_id";
    NSString const *kQMCustomParameterDialogRoomName = @"room_name";
    NSString const *kQMCustomParameterDialogRoomPhoto = @"room_photo";
    NSString const *kQMCustomParameterDialogRoomLastMessageDate = @"room_last_message_date";
    NSString const *kQMCustomParameterDialogUpdatedDate = @"dialog_updated_date";
    NSString const *kQMCustomParameterDialogType = @"type";
    NSString const *kQMCustomParameterDialogRoomUpdatedDate = @"room_updated_date";
    

提交回复
热议问题