2015-11-13 70 views
2

我已经整合了QuickBlox iOS sdk v2.5。我将消息发送到特定的,它们被发送到服务器,而是用于接收消息 - (空)chatDidReceiveMessage:(QBChatMessage *)消息是没有得到所谓的- (void)chatDidReceiveMessage:(QBChatMessage *)消息不起作用

这是我在做什么来连接

[[QBChat instance] addDelegate:self]; 

QBUser *chatUser=[QBUser new]; 
chatUser.ID=[[[NSUserDefaults standardUserDefaults] objectForKey:USERID] integerValue]; 
chatUser.password=[[NSUserDefaults standardUserDefaults] objectForKey:PASSWORD]; 
[[QBChat instance] connectWithUser:chatUser completion:nil]; 

有关创建chatDialog

QBChatDialog * chatDialog = [[QBChatDialog的alloc] initWithDialogID:NULL类型:QBChatDialogTypePrivate];

chatDialog.name = @"Chat with Garry"; 

NSMutableArray *chatPartners=[[NSMutableArray alloc] initWithObjects:[chatPartner objectForKey:@"id"] ,[[NSUserDefaults standardUserDefaults] objectForKey:USERID], nil]; 

chatDialog.occupantIDs=chatPartners; 

[QBRequest createDialog:chatDialog successBlock:^(QBResponse *response, QBChatDialog *createdDialog) { 
    //Success 

    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:response.data options:kNilOptions error:nil]; 

    [[NSUserDefaults standardUserDefaults] setObject:[json object 
} errorBlock:^(QBResponse *response) { 

//error 

}]; 

然后发送消息

QBChatMessage *message =[QBChatMessage message]; 
[message setText:self.messageText.text]; 

params[@"messageStatus"][email protected]"Test Message"; 
params[@"save_to_history"] = @YES; 

[message setCustomParameters:params]; 

[message setRecipientID:[[[NSUserDefaults standardUserDefaults] objectForKey:PARTNERID] integerValue]]; // 



[QBRequest createMessage:message successBlock:^(QBResponse *response, QBChatMessage *createdMessage) { 

    self.messageText.text = @"Type Here..."; 
    [self addMessagetoChat:createdMessage]; 


    NSLog(@"success: %@", createdMessage); 
} errorBlock:^(QBResponse *response) { 
    self.messageText.text = @"Type Here..."; 
    NSLog(@"ERROR: %@", response.error); 
}]; 

消息发送到聊天,但其他用户无法接收it.-(无效)chatDidReceiveMessage:(QBChatMessage *)消息是没有得到所谓的。或者可能b我使用了错误的功能。

回答

2

您没有发送消息,而是在REST中创建消息。所以QBChat代表'chatDidReceiveMessage'将不会被调用。然而,接收这样的消息需要从REST下载(例如,'[QBRequest messagesForDialogID:completionBlock:errorBlock:]'),这仍然是有效的。

为了通过委托接收消息,您需要使用QBChatDialog的'sendMessage:completion:',它使用XMPP来发送和接收消息。 在你的情况你应该这样做:

QBChatMessage *message =[QBChatMessage message]; 
[message setText:self.messageText.text]; 

params[@"messageStatus"][email protected]"Test Message"; 
params[@"save_to_history"] = @YES; 

[message setCustomParameters:params]; 

[message setRecipientID:[[[NSUserDefaults standardUserDefaults] objectForKey:PARTNERID] integerValue]]; 

[chatDialog sendMessage:message completionBlock:^(NSError * _Nullable error) { 
    if (error != nil) { 
     NSLog(@"Failed to send message with error: %@", error); 
    } 
}]; 
+0

谢谢你。你救了我几小时 –

+0

你好,我试过你的代码,但我无法发送消息。使用'createMessage'方法,消息在QuickBlox仪表板中显示,但使用'sendMessage',甚至在仪表板中显示的消息dsnt。请高清看看我的问题: http://stackoverflow.com/questions/40130571/chatdidreceivemessage-method-not-called-quickblox –