Я работаю над этой ошибкой в течение нескольких дней, и я не знаю, что не так. Позвольте мне изложить мой дизайн, чем объясню проблему. У меня есть две области, где я обрабатываю входящие сообщения, одну в chatviewcontroller и другую в делегате приложения. Мой код таков, что если вы войдете в контроллер просмотра чата, он обработает все сообщения, у которых есть настраиваемый параметр «msg». Все другие сообщения, которые имеют другие настраиваемые параметры, отправляются делегату приложения, и он обрабатывает его. Если вы отклоните Chatviewcontroller, делегат приложения обрабатывает все сообщения.QuickBlox Не отправлять сообщение Очень странное поведение
В этом проблема. Если пользователь Z отправляет сообщение пользователю X, запрашивающему запрос друга, пользователь X получит сообщение, если он в настоящее время использует приложение, независимо от того, находится ли он в режиме просмотра чата или в другом представлении. Другими словами, сообщение имеет настраиваемый параметр «newRequest», независимо от того, находится ли пользователь X в чате или нет, это сообщение обрабатывается делегатом приложения. Это прекрасно и прекрасно. Однако, если X имеет приложение в приостановленном состоянии, сообщение отправляется из Z, но еще не полученным X. В делегате приложения, когда приложение помещается в приостановленное состояние, он регистрирует пользователя с помощью рисунка 1. Когда пользователь возвращается в приложение, пользователь возвращается в систему с рисунком 2. Вот еще одна вещь, которую следует учитывать, если Z и X имеют разговор (Z отправил X запрос и X принял запрос (который работает только тогда, когда X имеет приложение на переднем плане)), а X отправляет приложение в приостановленное состояние, а Z отправляет X сообщение, а X возвращает, это сообщение отправляется через.
Мой код, обрабатывающий сообщения, не поставляется, потому что это не проблема. У моей обработки сообщений есть точки останова, которые не активируются, когда Z отправляет X запрос, в то время как X имеет приложение в фоновом режиме, чем выводит его на передний план. Буквально ничего не происходит.
Рисунок 1.
-(void)applicationDidEnterBackground:(UIApplication *)application
{
if([[QBChat instance] isLoggedIn])
[[QBChat instance] logout];
}
Рисунок 2.
if(user&&![[QBChat instance]isLoggedIn]&&pass)
{
// NSLog(@"%@",[user objectForKey:@"password"]);
// [[QBChat instance] setDelegate:self];
// [QBUsers logInWithUserLogin:user.username
// password:pass
// delegate:self
// context:(__bridge void *)((NSString *)user.password)];
[[QBChat instance] setDelegate:self];
if([[QBChat instance]loginWithUser:[[DataManager shared]currentUser]])
{
NSLog(@"Login Success");
}
}
Вы правы! Один из требований протокола XMPP - тело должно быть установлено в сообщении, поэтому вы не можете отправить пустое сообщение. – glebus