2013-12-15 3 views
0

Я работаю над этой ошибкой в ​​течение нескольких дней, и я не знаю, что не так. Позвольте мне изложить мой дизайн, чем объясню проблему. У меня есть две области, где я обрабатываю входящие сообщения, одну в 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"); 


    } 
} 

ответ

2

Таким образом, очевидно, если вы не поместить сообщение в текстовой переменной, он не посылает. Может ли кто-нибудь проверить это?

Пример: Перед

QBChatMessage *message = [[QBChatMessage alloc] init]; 
message.recipientID = [self.point.chatid integerValue]; // opponent's id 
[email protected]""; 
message.customParameters=[[NSMutableDictionary alloc]initWithObjectsAndKeys:user.username,@"name",  self.point.className,@"Name",@"newRequest",@"mode",nil]; 
if([[QBChat instance] sendMessage:message]) 

После и в настоящее время работает

QBChatMessage *message = [[QBChatMessage alloc] init]; 
message.recipientID = [self.point.chatid integerValue]; // opponent's id 
[email protected]"test"; 
message.customParameters=[[NSMutableDictionary alloc]initWithObjectsAndKeys:user.username,@"name", self.point.className,@"Name",@"newRequest",@"mode",nil]; 
if([[QBChat instance] sendMessage:message]) 
+1

Вы правы! Один из требований протокола XMPP - тело должно быть установлено в сообщении, поэтому вы не можете отправить пустое сообщение. – glebus

Смежные вопросы