Принять запрос собеседника в клиенте xmpp iphone - PullRequest
3 голосов
/ 14 марта 2012

Я разрабатываю клиент xmpp для iphone. Я могу отправлять и получать сообщения. Я хочу автоматически принять запрос на добавление в друзья без запроса пользователя. В какой функции я получу запрос. Пожалуйста, дайте мне любые подсказки.

Заранее спасибо.

Ответы [ 3 ]

7 голосов
/ 23 мая 2012

Хорошо, у меня есть идеальный ответ для вас!

Вот код:

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence {

    // a buddy went offline/online

    NSString *presenceType = [presence type];            // online/offline
    NSString *myUsername = [[sender myJID] user];
    NSString *presenceFromUser = [[presence from] user];

    if (![presenceFromUser isEqualToString:myUsername]) {

        if ([presenceType isEqualToString:@"available"]) {

            [_chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, kHostName]];
               NSLog(@"presence user is %@",presenceFromUser);

        } 

        else if  ([presenceType isEqualToString:@"unavailable"]) {

            [_chatDelegate buddyWentOffline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, kHostName]];
            NSLog(@"presence user is invisible %@",presenceFromUser);

        }
        else if  ([presenceType isEqualToString:@"subscribe"]) {

            [_chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, kHostName]];
                        NSLog(@"presence user wants to subscribe %@",presenceFromUser);

        }

    }
}

Я предоставил вам полный код метода DidReceivePresence для вашего лучшего понимания.

Теперь позвольте мне объяснить вам код. Если вы заметите в условии else if, я сравниваю значение (элемент), которое мы получаем. Поэтому, когда я получаю строку в виде подписки (когда пользователь отправляет запрос на добавление в список друзей), вам просто нужно добавить этого конкретного пользователя в список друзей просмотра таблиц.

Вы можете получить имя пользователя от "senceFromUser ".

Если вам нужно больше понимания, напишите мне на blueobaid@gmail.com, потому что я не получаю оповещения, когда вы отвечаете на мой ответ, хотя я вернусь и сам отвечу здесь, чтобы это могло помочь и другим! и я собираюсь поставить учебник в ближайшее время на http://Czartechnogeeks.com/iSolutions

Я рад, что смог поделиться чем-то ценным для пользователя с помощью stackoverflow после того, как он мне очень помог.

4 голосов
/ 14 марта 2012

U не получит запрос в отдельной функции.Когда собеседник приходит в онлайн или отправляет запрос, вызывается функция делегата didReceivePresence.если вы получаете тип присутствия = подписка, то это buddyrequest.Надеюсь, это поможет вам.

2 голосов
/ 01 августа 2012

Вы получите подписку в функции didReceivePresence .

Чтобы принять подписку, вы можете использовать этот код:

  NSXMLElement *presence = [NSXMLElement elementWithName:@"presence"];
  [presence addAttributeWithName:@"type" stringValue:@"subscribed"];
  [presence addAttributeWithName:@"to" stringValue:[presence fromStr]];
  [presence addAttributeWithName:@"from" stringValue:@"you@host"];
  [[self xmppStream] sendElement:presence];

Может помочь:)

...