如何在xmpp中获取用户的存在
How to get presence of user in xmpp
我正在用 xmpp 框架制作一个聊天应用程序。
我已经通过引用此 link 在我的项目中设置了 XMPPFramework:- http://code.tutsplus.com/tutorials/building-a-jabber-client-for-ios-xmpp-setup--mobile-7190
我在收到名册时遇到问题。
- (void)xmppStream:(XMPPStream )sender didReceivePresence:(XMPPPresence )presence
{
DDLogVerbose(@"%@: %@ - %@", THIS_FILE, THIS_METHOD, [presence fromStr]);
presenceType = [presence type]; // online/offline
//myUsername = [[sender myJID] user];
presenceFromUser = [[presence from] user];
//from = [[presence attributeForName:@"from"]stringValue];
//type=[[presence attributeForName:@"type"]stringValue];
NSLog(@"Present:%@",presenceType);
NSLog(@"StatusUser:%@",presenceFromUser);
[chlsttableview reloadData];
}
并且在 table 视图中,我将用户的存在显示为绿色或灰色的图像。
- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
cl=[tableView dequeueReusableCellWithIdentifier:@"chtlistprototype" forIndexPath:indexPath];
cl.fnm.text=[arrname objectAtIndex:indexPath.row];
cl.fmsg.text=[arrid objectAtIndex:indexPath.row];
cl.dpimg.image=img;
NSUInteger a=[arrid indexOfObject:cl.fmsg.text];
NSNumber *x=[NSNumber numberWithInteger:a];
if ([arrid containsObject:presenceFromUser]&&[presenceType isEqualToString:@"available"])
{
for (int i=0; i<arrid.count; i++)
{
// NSIndexPath *path=[NSIndexPath indexPathForRow:i inSection:0];
if ([[arrid objectAtIndex:indexPath.row]isEqualToString:presenceFromUser])
{
cl.stsimgvew.image=[UIImage imageNamed:@"green.png"];
}
/*NSString gt=[arrid objectAtIndex:indexPath.row];
NSUInteger n=[arrid indexOfObject:gt];
if (n==indexPath.row)
{
cl.stsimgvew.image=[UIImage imageNamed:@"green.png"];
}*/
}
}
return cl;
}
所以,我的问题是我没有在 table 视图中获得正确的状态图像。我一次出现一个并重新加载 table。
如果我有 5 个朋友,那么接收状态方法将调用 5 次状态,然后状态图像将仅显示最后一个用户的图像。
您可以在 XMPPFramework
周围使用 Swift
编写的 Wrapper
,这将简化基本聊天应用程序的开发,当 XMPPPresence
发生了变化,并且有一个端到端的教程可以帮助您实现目标。
你可以看看here。
-您将从 xmpp 上的用户状态 ID 获取,您可以将其反映在您的代码在线状态中
- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence
{
//XMPPPresence *online=[[XMPPPresence alloc]init];
//[self xmppStream:xmppStream didReceivePresence:online];
type=[[presence attributeForName:@"type"]stringValue];
show_sts=[presence show];
presenceFromUser = [[presence from] user];
}
我正在用 xmpp 框架制作一个聊天应用程序。
我已经通过引用此 link 在我的项目中设置了 XMPPFramework:- http://code.tutsplus.com/tutorials/building-a-jabber-client-for-ios-xmpp-setup--mobile-7190
我在收到名册时遇到问题。
- (void)xmppStream:(XMPPStream )sender didReceivePresence:(XMPPPresence )presence
{
DDLogVerbose(@"%@: %@ - %@", THIS_FILE, THIS_METHOD, [presence fromStr]);
presenceType = [presence type]; // online/offline
//myUsername = [[sender myJID] user];
presenceFromUser = [[presence from] user];
//from = [[presence attributeForName:@"from"]stringValue];
//type=[[presence attributeForName:@"type"]stringValue];
NSLog(@"Present:%@",presenceType);
NSLog(@"StatusUser:%@",presenceFromUser);
[chlsttableview reloadData];
}
并且在 table 视图中,我将用户的存在显示为绿色或灰色的图像。
- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
cl=[tableView dequeueReusableCellWithIdentifier:@"chtlistprototype" forIndexPath:indexPath];
cl.fnm.text=[arrname objectAtIndex:indexPath.row];
cl.fmsg.text=[arrid objectAtIndex:indexPath.row];
cl.dpimg.image=img;
NSUInteger a=[arrid indexOfObject:cl.fmsg.text];
NSNumber *x=[NSNumber numberWithInteger:a];
if ([arrid containsObject:presenceFromUser]&&[presenceType isEqualToString:@"available"])
{
for (int i=0; i<arrid.count; i++)
{
// NSIndexPath *path=[NSIndexPath indexPathForRow:i inSection:0];
if ([[arrid objectAtIndex:indexPath.row]isEqualToString:presenceFromUser])
{
cl.stsimgvew.image=[UIImage imageNamed:@"green.png"];
}
/*NSString gt=[arrid objectAtIndex:indexPath.row];
NSUInteger n=[arrid indexOfObject:gt];
if (n==indexPath.row)
{
cl.stsimgvew.image=[UIImage imageNamed:@"green.png"];
}*/
}
}
return cl;
}
所以,我的问题是我没有在 table 视图中获得正确的状态图像。我一次出现一个并重新加载 table。 如果我有 5 个朋友,那么接收状态方法将调用 5 次状态,然后状态图像将仅显示最后一个用户的图像。
您可以在 XMPPFramework
周围使用 Swift
编写的 Wrapper
,这将简化基本聊天应用程序的开发,当 XMPPPresence
发生了变化,并且有一个端到端的教程可以帮助您实现目标。
你可以看看here。
-您将从 xmpp 上的用户状态 ID 获取,您可以将其反映在您的代码在线状态中
- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence
{
//XMPPPresence *online=[[XMPPPresence alloc]init];
//[self xmppStream:xmppStream didReceivePresence:online];
type=[[presence attributeForName:@"type"]stringValue];
show_sts=[presence show];
presenceFromUser = [[presence from] user];
}