5

Quickblox iOS Video Attachments

I have integrated Quickblox iOS (Objc) Library into my app for chat module.

Images as an attachment under QBRequest TUploadFile method is possible. But I can't find any working solution to make a video attachment file under the same request.

I have confirmed by reading a document from Quickblog which says - Video attachment possible under Quickblox chat SDK.

Do anyone has any working solution to make video file attachment with this?

Below code is written to upload a video under QBRequest TUploadFile.

Thanks in advance!

- (void)uploadAndSendAttachmentMessage:(QBChatMessage*)message toDialog:(QBChatDialog*)dialog withChatService:(QMChatService*)chatService withAttachedVideo:(NSData*)videoData completion:(QBChatCompletionBlock)completion {
    [self changeMessageAttachmentStatus:QMMessageAttachmentStatusLoading forMessage:message];

    [QBRequest TUploadFile:videoData fileName:@"attachment video" contentType:@"video/mp4" isPublic:YES successBlock:^(QBResponse* response, QBCBlob* blob) {
        QBChatAttachment* attachment = [QBChatAttachment new];
        attachment.type = @"video";
        attachment.ID = blob.UID;
        attachment.url = [blob publicUrl];

        message.attachments = @[attachment];
        message.text = @"Attachment video";

        [self saveData:videoData chatAttachment:attachment error:nil];
        [self.attachmentsStorage setObject:videoData forKey:attachment.ID];

        [self changeMessageAttachmentStatus:QMMessageAttachmentStatusLoaded forMessage:message];

        [chatService sendMessage:message type:QMMessageTypeText toDialog:dialog saveToHistory:YES saveToStorage:YES completion:completion];
    } statusBlock:^(QBRequest* request, QBRequestStatus* status) {
        if ([self.delegate respondsToSelector:@selector(chatAttachmentService:didChangeUploadingProgress:forMessage:)]) {
            [self.delegate chatAttachmentService:self didChangeUploadingProgress:status.percentOfCompletion forMessage:message];
        }
    } errorBlock:^(QBResponse* response) {
        [self changeMessageAttachmentStatus:QMMessageAttachmentStatusNotLoaded forMessage:message];

        if (completion) {
            completion(response.error.error);
        }
    }];
}
Akash Thakkar
  • 941
  • 1
  • 6
  • 16

1 Answers1

0

You can use the following method to send video.

- (void)sendAttachmentMessage:(QBChatMessage *)attachmentMessage
                     toDialog:(QBChatDialog *)dialog
               withAttachment:(QBChatAttachment *)attachment
                   completion:(nullable QBChatCompletionBlock)completion

The complete code will look like this

- (void)didPickAttachmentVideo:(NSURL *)video {

    QBChatMessage *message = [QBChatMessage new];
    message.senderID = self.senderID;
    message.dialogID = self.dialog.ID;
    message.dateSent = [NSDate date];



    __weak typeof(self)weakSelf = self;
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        __typeof(weakSelf)strongSelf = weakSelf;

        QBChatAttachment *attachment = [QBChatAttachment videoAttachmentWithFileURL:video];

        // Sending attachment to the dialog.

        dispatch_async(dispatch_get_main_queue(), ^{

            [self.chatDataSource addMessage:message];

            [[ServicesManager instance].chatService sendAttachmentMessage:message
                                                                 toDialog:strongSelf.dialog
                                                           withAttachment:attachment
                                                               completion:^(NSError *error) {

                                                                   [strongSelf.attachmentCells removeObjectForKey:message.ID];
                                                                   NSString * myurl = attachment.remoteURL.absoluteString;
                                                                   if (error != nil) {
                                                                       [strongSelf.chatDataSource deleteMessage:message];
                                                                    //Show error alert

                                                                   }
                                                               }];
        });
    });
}
Suraj Rao
  • 29,388
  • 11
  • 94
  • 103
Dipendra Dubey
  • 187
  • 1
  • 1
  • 8