我一直在尝试使用下面提到的代码创建一个XMPPRoom,我已经在线查看了各种示例,但是当我使用此代码时,委托xmppRoomDidCreate或xmppRoomDidJoin委托不会被调用.我不确定我在这里做错了什么?
PS:xmppStream的代表被调用,它被连接并授权,但问题是XMPPRoom委托...
- (void)createChatRoom
{
NSString *jabberID = @"abcxyz@testservice.com";
self.xmppStream.hostName = @"testservice.com";
self.xmppStream = [[XMPPStream alloc]init];
[self.xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
[self.xmppStream setMyJID:[XMPPJID jidWithString:jabberID]];
NSError *error = nil;
if (![self.xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error]) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error" message:[NSString stringWithFormat:@"Cannot connect to server %@",[error localizedDescription]] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
return;
}
// Configure xmppRoom
XMPPJID *roomJID = [XMPPJID jidWithString:@"TestRoom@conference.testservice.com"];
XMPPRoomMemoryStorage *roomMemoryStorage = [[XMPPRoomMemoryStorage alloc] init];
XMPPRoom *xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:roomMemoryStorage
jid:roomJID
dispatchQueue:dispatch_get_main_queue()];
[xmppRoom activate:self.xmppStream];
[xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()];
}
Run Code Online (Sandbox Code Playgroud) 我目前正在研究xmppframework,要求是在两个iPhone之间传输文件.我搜索了XEP并找到了0065和0096
XEP-0065说:
XMPP设计用于在网络实体之间发送相对较小的XML块,而不是用于发送二进制数据.然而,有时希望将二进制数据发送到在XMPP网络上发现的另一个实体(例如,发送文件).因此,具有用于在XMPP网络上的任何两个实体之间流式传输二进制数据的通用协议是有价值的.这种字节流技术的主要应用是SI文件传输[1]和Jingle文件传输[2]中规定的文件传输. 但是,其他应用程序也是可能的,这就是为什么开发通用协议而不是专用于特定应用程序(如文件传输)的协议非常重要的原因.
请看粗体行,如果文件传输XEP是SI文件传输(0096)和Jingle文件传输(0234),我会感到困惑,那么这个0065 XEP的目的是什么?为什么人们在网上引用sep-0065进行文件传输?
我已经使用 XMPP 协议进行了一对一聊天。现在,我想在我的应用程序中发送图像和视频。我研究了文件传输,但没有找到解决方案。我还使用了下面的代码进行 Socket 连接。
请建议我如何去做这件事。
[TURNSocket setProxyCandidates:@[@"MyserverHost-desktop"]];
XMPPJID *jid = [XMPPJID jidWithString:@"1254225445@MyserverHost-desktop"];
TURNSocket *turnSocket = [[TURNSocket alloc] initWithStream:[[self appDelegate]xmppStream] toJID:jid];
[app.turnSocketArray addObject:turnSocket];
[turnSocket startWithDelegate:self delegateQueue:dispatch_get_main_queue()];
[turnSocket release];
- (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket
{
}
- (void)turnSocketDidFail:(TURNSocket *)sender
{
}
Run Code Online (Sandbox Code Playgroud)
每次连接失败方法调用..
谢谢。
我正在使用xmpp框架来开发使用openfire服务器的聊天应用程序.用户使用In Band帐户注册在服务器上注册.但我无法理解如何将用户添加到另一个用户的焙烧器列表中.应用程序是否必须获取在服务器上注册的所有用户,以便使用该应用程序的用户可以发送伙伴请求或当任何用户联机时,服务器必须将其广播给其他用户.我在流程中遇到困难.请帮帮我.
我使用robbiehanson xmpp示例实现了xmpp.我能聊天,也能发送图像.我发送的图像转换为nsdata并进一步转换为Base64String,然后发送字符串
[self.xmppStream sendElement:message];
这样,如果图像的大小很小,我能够立即发送,但如果图像的大小更大,则两个xmpp用户断开连接并且文件不会被传输.视频和音频也是如此.虽然我能够使用压缩图像
UIImageJPEGRepresentation(image,0.005);
Run Code Online (Sandbox Code Playgroud)
但是如何发送视频和音频的大小显然会很大.我已阅读XEP - 0065和XEP - 0096上的文档,但无法以正确的方式实现它.请让我知道为什么用户断开连接,为什么我无法使用base64传输繁重的文件,也分享了有助于我传输视频和音频的代码.
真的很感谢你的帮助.
我正在使用带有openfire 4.2.0的监控插件1.6.0。
以下是openfire管理控制台上存档设置的屏幕截图。
我的问题
如您所见,该插件已安装。但是,当我尝试使用以下代码获取聊天记录时:我收到服务不可用的响应。
func fetchChatHistoryFromServer(completionHandler completion: @escaping FetchChatHistoryCompletionHandler) {
let iq = DDXMLElement(name: "iq")
iq.addAttribute(withName: "type", stringValue: "set")
iq.addAttribute(withName: "id", stringValue: UserManager.shared.activeUser.jid)
let query = DDXMLElement(name: "query")
query.setXmlns("urn:xmpp:mam:2")
query.addAttribute(withName: "queryid", stringValue: XMPPManager.shared.xmppStream.generateUUID)
let x = DDXMLElement(name: "x")
x.setXmlns("jabber:x:data")
x.addAttribute(withName: "type", stringValue: "submit")
let field = DDXMLElement(name: "field")
field.addAttribute(withName: "var", stringValue: "FORM_TYPE")
field.addAttribute(withName: "type", stringValue: "hidden")
let fieldValue = DDXMLElement(name: "value", stringValue: "urn:xmpp:mam:2")
field.addChild(fieldValue)
x.addChild(field)
query.addChild(x)
iq.addChild(query)
//let xmppResultSet = XMPPResultSet(max: 2000)
Logger.log(iq)
didFetchChatHistoryCompletionBlock = completion
xmppMessageArchivingManagement?.retrieveMessageArchive(withFields: [iq], …Run Code Online (Sandbox Code Playgroud) XMPP框架错误
ld:'xmppFrameWork/Vendor/libidn/libidn.a(stringprep.o)'不包含bitcode.您必须在启用bitcode(Xcode设置ENABLE_BITCODE)的情况下重建它,从供应商处获取更新的库,或禁用此目标的bitcode.对于架构arm64
注意:仅在iPhone设备中运行应用程序时出错.(它在模拟器中工作).