Pergunta

Estou desenvolvendo um cliente xmpp para iphone.consigo enviar e receber mensagens.Quero aceitar a solicitação de amizade automaticamente, sem avisar o usuário.Em qual função receberei solicitação.Por favor, me dê alguma dica.

Desde já, obrigado.

Foi útil?

Solução

Tudo bem, tenho uma resposta perfeita para você!

Aqui está o código:

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

        }

    }
}

Forneci a você o código completo do método DidReceivePresence para seu melhor entendimento.

Agora deixe-me explicar o código.Se você notar na condição else if estou comparando o valor (elemento) que estamos recebendo.Então, quando eu obtenho a string como Subscribe (quando o usuário envia a solicitação de amizade), você só precisa adicionar esse usuário específico à sua lista de amigos do tableview.

Você pode obter o nome de usuário em "presenceFromUser".

Se precisar de mais compreensão, envie-me um e-mail para blueobaid@gmail.com porque não recebo alertas quando você responde à minha resposta, mas voltarei e responderei aqui para que possa ajudar outras pessoas também!e vou colocar um tutorial em breve http://Czartechnogeeks.com/iSolutions

Estou feliz por poder compartilhar algo valioso para o usuário com stackoverflow, depois que ele me ajudou muito.

Outras dicas

U não recebe solicitação em função separada.Sempre que um amigo se trata online ou envie solicitação, a função Delegate Delegate é chamada.Se você receber o tipo de presença= assinatura, é BuddyRequest.Espero que isso ajude você.

Você receberá a assinatura em função didReceivePresence.

Para aceitar a assinatura, você pode usar este código:

  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];

Que isso ajude :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top