Search code examples
iosobjective-cquickblox

What is the recommended Process for using QuickBlox in iOS Share Extension


I am using QuickBlox successfully in a a main iOS app and would like to extend the features in to a Share Extension using the cocoapod 'QuickBlox', '~> 2.7.5'. I needs to send the message in the background without opening the main application.

I am using the code below without any success to first setup sending text only.

    [QBRequest logInWithUserLogin:USERNAME password:PASSWORD successBlock:^(QBResponse *response, QBUUser *user) {
        if (user) {
            user.login = USERNAME;
            user.password = PASSWORD;
            [[QBChat instance] connectWithUser:user completion:^(NSError * _Nullable error) {

                QBChatDialog *chatDialog = [[QBChatDialog alloc] initWithDialogID:[settingsDict valueForKey:@"sendingID"] type:QBChatDialogTypeGroup];

                QBChatMessage *messagetosend = [QBChatMessage message];
                messagetosend.senderID = userQBID;
                messagetosend.text = self.contentText;
                messagetosend.dateSent = [NSDate dateWithTimeInterval:-12.0f sinceDate:[NSDate date]];

                [chatDialog joinWithCompletionBlock:^(NSError * _Nullable error) {
                    [chatDialog sendMessage:messagetosend completionBlock:^(NSError * _Nullable error) {
                        NSLog(@"%@",[error localizedDescription]);
                    }];

                }];
            }
             ];
        }
    } errorBlock:^(QBResponse * _Nonnull response) { }];

Solution

  • You can send the message via REST. Sending via REST doesn't need to connect to chat and join in the dialog.

    NSUInteger senderID = //Current User ID
    QBChatMessage *message = [QBChatMessage message];
    message.text = intent.content;
    message.senderID = senderID;
    message.markable = YES;
    message.deliveredIDs = @[@(senderID)];
    message.readIDs = @[@(senderID)];
    message.dialogID = dialogID;
    message.dateSent = [NSDate date];
    
    [QBRequest sendMessage:message successBlock:^(QBResponse * _Nonnull response, QBChatMessage * _Nonnull createdMessage) {
    
    } errorBlock:^(QBResponse * _Nonnull response) {
    
    }];