我正在开发基于XMPPFramework和ejabberd Community Edition server的XMPP iOS应用程序,并且我正在玩vCard管理。
在我的实验中,我发现在通过以下方式为用户请求vCard时:
[vCardTempModule fetchvCardTempForJID:myJID];
如果用户在服务器上没有vCard,则不会调用任何委托方法。
有没有办法通过服务器的明确答案100%确定用户没有vCard?
或者我应该只考虑用户在 n 秒延迟后没有任何代表反馈的情况下没有vCard? (对于在移动环境中非常频繁的网络延迟情况,这将是模棱两可的)
答案 0 :(得分:2)
在XEP-0054 XMPPvCardTempModule.m
中你需要这样做
- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender {
XMPPvCardTemp *myvCardTemp = [self myvCardTemp];//check if exist or not
if (!myvCardTemp)//if not then create a new vcard
{
NSXMLElement *vCardXML = [NSXMLElement elementWithName:@"vCard" xmlns:@"vcard-temp"];
XMPPvCardTemp *newvCardTemp = [XMPPvCardTemp vCardTempFromElement:vCardXML];
[newvCardTemp setNickname:userName];
[self updateMyvCardTemp:newvCardTemp];
}
}
希望它适合你:)