QuickBlox чат получил сообщение не звонит
Я столкнулся с проблемой, когда я не получаю сообщения во время чата в группе типа QBChatDialogTypePublicGroup. Однако я могу видеть в журналах, что сообщение приходит ко мне. Согласно объяснению на официальном сайте quickblox, следующий метод должен вызываться при получении сообщения
- (void)chatRoomDidReceiveMessage:(QBChatMessage )message fromDialogId:(NSString )dialogId
- (void)chatDidNotSendMessage:(QBChatMessage )message toDialogId:(NSString )dialogId error:(NSError *)error
Но ни один из вышеперечисленных делегатов не звонит.
Вот шаги, которые я предпринял -
Для входа в систему:-
[QBRequest logInWithUserLogin:[[AppDelegate sharedAppDelegate]getQBUserInstance].login password:[[AppDelegate sharedAppDelegate]getQBUserInstance].password successBlock:^(QBResponse response, QBUUser user) {
NSLog(@"quickblox user id is %lu", (unsigned long)user.ID);
[[NSUserDefaults standardUserDefaults] setValue:[NSString stringWithFormat:@"%lu", (unsigned long)user.ID]forKey:@"QuickbloxUserID"];
[[AppDelegate sharedAppDelegate]getQBUserInstance].ID=user.ID;
// set Chat delegate
[[QBChat instance] addDelegate:self];
// login to Chat
[[QBChat instance] loginWithUser:[[AppDelegate sharedAppDelegate]getQBUserInstance]];
} errorBlock:^(QBResponse *response) {
// error handling
NSLog(@"error: %@", response.error);
}];
-(void) chatDidLogin{
[QBChat instance].keepAliveInterval = 30;
[QBChat instance].autoReconnectEnabled = YES;
[QBChat instance].streamManagementEnabled = YES;
NSLog(@"You have successfully signed in to QuickBlox Chat");
[MyNetWorking endHud];
FMTabBarController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"tabView"];
[AppDelegate sharedAppDelegate].window.rootViewController=vc;
//[self presentViewController:vc animated:YES completion:nil];
}
- (void)chatDidNotLoginWithError:(NSError *)error{
NSLog(@"You have successfully signed in to QuickBlox Chat %@", error.domain);
NSLog(@"You have successfully signed in to QuickBlox Chat %@", error.userInfo);
NSLog(@"You have successfully signed in to QuickBlox Chat %@", error.localizedDescription);
}
- (void)chatDidConnect{
NSLog(@"You have successfully signed in to QuickBlox Chat");
}
- (void)chatDidAccidentallyDisconnect{
NSLog(@"You have successfully signed in to QuickBlox Chat");
}
- (void)chatDidReconnect{
NSLog(@"You have successfully signed in to QuickBlox Chat");
}
Чтобы присоединиться к группе, я использовал следующий код
groupChatDialog = [[QBChatDialog alloc] initWithDialogID:self.groupChatID type:QBChatDialogTypePublicGroup];
NSLog(@"Chat dialog %@", [QBChat instance].delegates);
// [[QBChat instance] addDelegate:self];
// NSLog(@"Chat dialog %@", [QBChat instance].delegates);
[groupChatDialog setOnJoin:^() {
[[[UIAlertView alloc] initWithTitle:@"FM" message:@"Group Joined Successfully" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:@"Cancel", nil] show];
}];
[groupChatDialog setOnJoinFailed:^(NSError *error) {
[[[UIAlertView alloc] initWithTitle:@"FM" message:error.localizedDescription delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:@"Cancel", nil] show];
NSLog(@"Error is %@", error);
}];
[groupChatDialog join];
************************************************************
To fetch previous chat I have used the following code
************************************************************
QBResponsePage *resPage = [QBResponsePage responsePageWithLimit:20 skip:0];
[QBRequest messagesWithDialogID:self.groupChatID extendedRequest:nil forPage:resPage successBlock:^(QBResponse response, NSArray messages, QBResponsePage *responcePage) {
NSLog(@"messages are %@", messages);
[arrayChat addObjectsFromArray:messages];
[self.tableView reloadData];
} errorBlock:^(QBResponse *response) {
NSLog(@"error: %@", response.error);
}];
Для отправки сообщения я использовал следующий код
messageToSent = [QBChatMessage message];
[messageToSent setText:_textField.text];
[messageToSent setDateSent:[NSDate date]];
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"save_to_history"] = @YES;
[messageToSent setCustomParameters:params];
[groupChatDialog sendMessage:messageToSent];
_textField.text = @"";
[arrayChat addObject:messageToSent];
[_tableView reloadData];
После этого я ожидаю вызова следующих методов
- (void)chatRoomDidReceiveMessage:(QBChatMessage )message fromDialogId:(NSString )dialogId{
NSLog(@"message is %@", message);
}
- (void)chatDidNotSendMessage:(QBChatMessage )message toDialogId:(NSString )dialogId error:(NSError *)error{
[[[UIAlertView alloc] initWithTitle:@"FM" message:error.localizedDescription delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:@"Cancel", nil] show];
NSLog(@"Error is %@", error);
}
Но они не получают вызов, однако они должны быть вызваны в соответствии с объяснением на веб-сайте. Пожалуйста, дайте мне знать, что мне здесь не хватает или что я здесь делаю неправильно.
2 ответа
сначала убедитесь, что вы установили делегата QBChat, чтобы установить код использования ниже
QBChat.instance.addDelegate(self)
Тем не менее, если ваши методы делегата не вызываются, убедитесь, что вы подключены к чату. если вы не подключены к чату, делегаты не будут вызваны.
попробуйте подключиться к чату, используя приведенный ниже код, и повторите попытку.
*Свифт-код
QBChat.instance.connect(withUserID: "user_id",
password: "password",
completion: { [weak self] error in
guard let self = self else { return }
if let error = error
print("Error occured while connecting to chat")
} else {
print("successfully connected to chat.")
self.onCompleteAuth?()
}
})
Примечание: соединение с чатом может быть потеряно по некоторым причинам, 1. потеряно соединение с интернетом, 2. приложение перешло в фоновый режим или было заблокировано. 3. если вы представляете такие контроллеры, как UIImagePickerController, Camera, UIDocumentPickerController и т. д.
Правильный метод
-(void) chatRoomDidReceiveMessage:(QBChatMessage *)message fromDialogID:(NSString *)dialogID
Не fromDialogId