QuickBlox不发送消息非常奇怪的行为

时间:2013-12-15 17:18:17

标签: ios messaging quickblox

我已经研究了这个bug好几天了,我不知道出了什么问题。让我概述一下我的设计,而不是解释这个问题。我有两个区域来处理传入的消息,一个在chatviewcontroller中,另一个在app delegate中。我的代码是这样的,如果你进入聊天视图控制器,它将处理所有具有“msg”自定义参数的消息。具有其他自定义参数的所有其他消息将发送到应用程序委托,并处理它。如果您关闭Chatviewcontroller,则app delegate将处理所有消息。

这是问题所在。 如果用户Z向用户X发送消息以询问朋友请求,则用户X将在他当前正在使用该应用时接收该消息,无论他是在聊天视图还是另一视图中。换句话说,消息具有自定义参数“newRequest”,因此无论用户X是否在聊天视图中,该消息都由应用代表处理。这很好,很完美。但是,如果X使应用程序处于挂起状态,则消息从Z发送但从未被X接收。在应用程序委托中,当应用程序进入挂起状态时,它会将用户从图1中记录下来。返回到应用程序,用户重新登录图2.如果Z和X进行了对话,则需要考虑另一件事(Z向X发送请求,X接受请求(仅当X具有应用程序时才有效)在前台))并且X将应用程序发送到挂起状态,并且Z向X发送消息,并且X返回,该消息确实被发送通过。

我不提供处理邮件的代码,因为它不是问题。我的消息处理具有断点,当Z在后台发送X而不是将其带到前台时,Z发送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");


   }
}

1 个答案:

答案 0 :(得分:2)

显然,如果你没有在文本变量中添加消息,它就不会发送。有人可以验证这个吗?

示例:之前

QBChatMessage *message = [[QBChatMessage alloc] init];
message.recipientID = [self.point.chatid integerValue]; // opponent's id
message.text=@"";
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
message.text=@"test";
message.customParameters=[[NSMutableDictionary alloc]initWithObjectsAndKeys:user.username,@"name",    self.point.className,@"Name",@"newRequest",@"mode",nil];
if([[QBChat instance] sendMessage:message])