2015-09-22 5 views
0

Я создаю приложение для чата с инфраструктурой xmpp.Как получить присутствие пользователя в xmpp

У меня есть настройки 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]; 

} 

И в представлении таблицы я показываю присутствие пользователя как изображение зеленого или серого.

- (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; 
} 

Итак, моя проблема заключается в том, что я не получаю должного присутствия изображения в Tableview. Я получаю одно присутствие за раз и перезаряжаю таблицу. Если у меня есть 5 друзей, значит, метод приема будет вызывать 5 раз для присутствия, а затем изображение присутствия будет отображаться только у последнего пользователя.

+0

это является примером приложение, которое полностью работает, пройти через это, это поможет ua lot https://github.com/rayaleen/OpenFireClient –

ответ

1

-Вы получите от присутствия идентификатора пользователя на XMPP, который вы можете отразить в Уре онлайн статус вашего кода

- (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]; 
} 
+1

Как мы можем получить этот метод, As, Этот метод не вызывает меня, когда любой пользователь переходит в автономный режим или через Интернет. Есть ли необходимость в настройке кода или на сервере? – Sonu

+0

Могу ли я узнать, как назвать этот метод делегата? этот метод не может быть вызван просто пользователем для офлайн или онлайн? –

0

Вы можете использовать Wrapper написано в Swift вокруг XMPPFramework, это упростит разработку основного приложения чата, вы будете уведомлены, когда XMPPPresence изменения и есть учебник от конца до конца, чтобы вы там ,

Вы можете проверить это here.

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