我一直對這個bug了幾天,我不知道什麼是錯的。讓我概述一下我的設計,而不是解釋這個問題。我有兩個地方處理傳入的消息,一個在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