2015-11-13 43 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 –