Tag: xmpp

iOS背景和XMPPFramework

所以我创build了一个简单的XMPP应用程序,但似乎我不能有后台处理,除非应用程序是这里列出的指定类别之一。 我只想保持打开的套接字,并显示通知收到的消息,如果应用程序不在前台。 我发现在iOS背景上find很好的信息有点困难,看起来很多应用程序都能做到这一点,但是文档似乎更加严格。 是否可以在后台长时间运行这样的聊天客户端? 类似于Android的服务生命周期?

使用ios xmpp框架显示在线好友列表问题

我正在使用XMPP框架构buildiPhone应用程序。 我在代码下面有一个问题: NSString *presenceType = [presence type]; // online/offline NSString *myUsername = [[sender myJID] user]; NSString *presenceFromUser = [[presence from] user]; if (![presenceFromUser isEqualToString:myUsername]) { if ([presenceType isEqualToString:@"available"]) { [self._chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, @"server.net"]]; } else if ([presenceType isEqualToString:@"unavailable"]) { [self._chatDelegate buddyWentOffline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, @"server.net"]]; } } 假设我已经创build了2个jabber账户ichat@server.net和iPhone@server.net。 当我用iPhone帐户启动我的应用程序时,我看不到没有人连接。 当我删除这一行: if (![presenceFromUser isEqualToString:myUsername]) 我可以看到两行iphone@server.net(我的帐户)一个在线buddies表视图。 在debugging模式下,当我检查了presenceFromUservariables时,每当它包含我的login信息,都不会在网上login其他好友。 […]

通过丢失的连接xmpp丢失消息

我经历了这个问题 XMPP上丢失的设备断开连接 但没有答案。 当由于某些networking问题而导致连接丢失时,服务器不能识别它并继续向断开的接收机发送消息,这些消息永久丢失。 我有一个解决方法,我从服务器ping客户端,当客户端断开连接时,服务器能够在10秒后识别它,并将更多消息保存在队列中,防止它们丢失。 我的问题是可以100%失败保存消息传递可以通过使用其他方式来实现,我知道psi和许多其他xmpp客户端正在这样做。 在ios方面,我正在使用xmppframework

如何处理XMPP框架上的拒绝操作 – Objective C

我已经使用XMPP Framwork实现了群聊。 我能够连接,发送和接收双方之间的消息。 但是,他们是在获得状态的时候和代理人在另一边的问题拒绝我的要求。 Agent Decline请求时,没有委托人正在呼叫。 这是我的代码。 – (void)setupStream { _xmppStream = [[XMPPStream alloc] init]; [_xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()]; [_xmppStream setHostName:kChatUrl]; [_xmppStream setHostPort:5222]; _xmppMUC = [[XMPPMUC alloc] initWithDispatchQueue:dispatch_get_main_queue()]; [_xmppMUC activate:_xmppStream]; [_xmppMUC addDelegate:self delegateQueue:dispatch_get_main_queue()]; } 这里是代表方法 – (void)xmppMUC:(XMPPMUC *)sender roomJID:(XMPPJID *)roomJID didReceiveInvitationDecline:(XMPPMessage *)message { [self.delegate gatwayAgentDeclinedChatRequest]; } – (void)xmppMUC:(XMPPMUC *)sender roomJID:(XMPPJID *) roomJID didReceiveInvitation:(XMPPMessage *)message { NSLog(@"%@", […]

XMPPFramework – 删除已注册的用户帐户时出现“未经授权”错误

我想删除当前使用XMPP连接的Openfire用户。 我使用下面的代码来删除用户: – (void)DeleteAccountFromOpenfire { NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"'jabber:iq:register'"]; [query addChild:[NSXMLElement elementWithName:@"remove"]]; XMPPIQ *iq = [XMPPIQ iqWithType:@"set" elementID:@"unreg1"]; [iq addChild:query]; [[self xmppStream] sendElement:iq]; } 但是我从服务器得到一个not-authorized错误。 我怎么能避免呢?

在XMPP中无法获得邮件传递收据

我是XMPP的新手。 我正在为我的聊天应用程序使用XMPP和开放式消息服务器。 应用程序正在工作,但现在我想要收到消息传递收据。 我在setupStream使用下面的代码: xmppMessageDeliveryRecipts = [[XMPPMessageDeliveryReceipts alloc] initWithDispatchQueue:dispatch_get_main_queue()]; xmppMessageDeliveryRecipts.autoSendMessageDeliveryReceipts = YES; xmppMessageDeliveryRecipts.autoSendMessageDeliveryRequests = YES; [xmppMessageDeliveryRecipts activate:xmppStream]; 在sendMessage : NSString *messageID=[xmppStream generateUUID]; NSXMLElement *message = [NSXMLElement elementWithName:@"message"]; [message addAttributeWithName:@"type" stringValue:@"chat"]; [message addAttributeWithName:@"id" stringValue:messageID]; [message addAttributeWithName:@"to" stringValue:myJID]; [message addChild:body]; 但是我收不到信息传递收据。 我怎么才能得到它? 有人知道吗?

从XMPP获取离线消息而不在线

我们正在使用ejabberd服务器为我们的移动聊天应用程序。 我们正在为我们的IOS应用程序使用IOS XMPP-Framework( https://github.com/robbiehanson/XMPPFramework ) 但是我们在执行上遇到问题,我们找不到解决scheme。 我们已经实现了XMPP消息传递的各个方面,除了一件事之外, 虽然我们的应用程序是在后台,我们的ejabberd服务器向我们发送推送通知,通知我们关于离线消息。 (只发送离线消息的通知) 然后,我们决定实施IOS背景推送通知function,以在应用程序处于后台时获取脱机消息。 但问题是我们必须成为在线(发送状态)才能获得离线消息。 但是当我们这样做时,会产生两个不希望的后果: 发送消息的一方看到我们作为在线(尽pipe我们在后台) 由于我们在应用程序处于后台时正在联机,因为我们在线并且服务器只能发送离线消息的通知,所以我们的服务器无法发送其他人的消息的推送通知。 为了解决这个问题,只有我能想到的是,如果有办法从xmpp服务器上检索离线消息而不上网。 有谁知道是否有任何方式与XMPP框架的iOS [编辑]让我再澄清一点: 问题不仅仅是一个: 问题1 – 推送通知问题: 1.1 – Server check if the message is sending to an online or offline user. If the user is offline server sends push notification to inform user but if the user is online server […]

XMPPFramework – 创buildvCard

我使用下面的代码来创build一个vCard无济于事。 它总是进入if封锁。 有人可以看看它,看看我是否失去了什么? xmppvCardStorage = [XMPPvCardCoreDataStorage sharedInstance]; xmppvCardTempModule = [[XMPPvCardTempModule alloc] initWithvCardStorage:xmppvCardStorage]; XMPPvCardTemp *myvCardTemp = [xmppvCardTempModule myvCardTemp]; if (!myvCardTemp) { NSXMLElement *vCardXML = [NSXMLElement elementWithName:@"vCard" xmlns:@"vcard-temp"]; XMPPvCardTemp *newvCardTemp = [XMPPvCardTemp vCardTempFromElement:vCardXML]; myvCardTemp = newvCardTemp; } [myvCardTemp setNickname:@"someNick"]; [myvCardTemp setMiddleName:@"somegender"]; [xmppvCardTempModule updateMyvCardTemp:myvCardTemp]; 我已经试过这个,但它仍然不工作…被称为获得vcard的函数总是返回零。 – (XMPPvCardTemp *)vCardTempForJID:(XMPPJID *)jid shouldFetch:(BOOL)shouldFetch 这个函数返回零值。 有什么我失踪? 另一件事是它发送一个错误的日志: Error saving – Error Domain=NSCocoaErrorDomain […]

通过HTTP代理的iOS XMPP聊天

我有一个iPhone应用程序与2个服务工作: 使用REST服务通过http使用AFNetworking 通过TCP进行XMPP聊天 – 使用XMPPFramework https://github.com/robbiehanson/XMPPFramework 我的iPhone使用公司networking代理,所以我在设置http://qblx.co/1eJ9TwI设置HTTP代理 通过这个代理设置,所有对REST服务的请求都通过这个代理。 但是,我的应用程序直接连接到聊天服务器,没有代理。 如何使聊天工作通过代理? 正如我所看到的,XMPPFramework使用GCDAsyncSocket作为传输https://github.com/robbiehanson/CocoaAsyncSocket 你有什么build议如何设置通过代理聊天?

iOS中的XMPPStreamManagement无法发送/接收确认和节标识

我能够发送消息给用户,这意味着我有一个工作和authentication的xmppStream。 但我无法发送和接收来自服务器的确认。 我想知道服务器成功接收了哪些消息。 我search了一下,发现XEP-0198应该实现这个。 我使用ejabberd作为XMPP服务器,它支持XEP-0198。 我试过了,但是我不知道我是否正确。 首先我包含头文件并添加了XMPPStreamManagementDelegate。 #import "XMPPStreamManagement.h" @interface AppDelegate : UIResponder <UIApplicationDelegate,XMPPStreamManagementDelegate> 在实现文件中,这是我如何定义stream。 XMPPStream *xmppS = [[XMPPStream alloc] init]; [xmppS addDelegate:self delegateQueue:dispatch_get_main_queue()]; XMPPStreamManagement *xsm = [[XMPPStreamManagement alloc] init]; [xsm addDelegate:self delegateQueue:dispatch_get_main_queue()]; [xsm activate:xmppS]; 之后,我连接到服务器。 连接成功后,我发送一个启用节。 NSXMLElement *enable = [NSXMLElement elementWithName:@"enable" xmlns:@"urn:xmpp:sm:3"]; [xsm.xmppStream sendElement:enable]; 然后我发送一条消息 NSXMLElement *a = [NSXMLElement elementWithName:@"request" xmlns:@"urn:xmpp:receipts"]; XMPPElement *e = […]