2017-03-17 4 views
1

iOS 응용 프로그램에서 XMPP 서버에 연결하려고합니다. XMPPFrameworks를 사용하고 있는데 서버에 연결하려고 시도한 후 어떤 이유로 XMPP 스트림 대리자가 호출되지 않습니다. 내 컴퓨터에서 타사 XMPP 응용 프로그램을 사용하여 로그인 정보를 두 번 확인 했으므로 믿을 수 없습니다. 이 대리자를 올바르게 설정하지 않았습니까? 잘못된 구문을 사용하고 있습니까? 내 View Controller 대신 App Delegate에서 이것을 설정해야합니까? 어떤 도움이라도 대단히 감사 할 것입니다. 아래는 내 코드입니다XMPP 스트림 대리인이 호출되지 않았습니까? Swift 3

import UIKit 
import XMPPFramework 
class ViewController: UIViewController, XMPPStreamDelegate { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    connect() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func connect() { 
    let stream = XMPPStream() 
    stream?.addDelegate(self, delegateQueue: DispatchQueue.main) 
    stream?.myJID = XMPPJID.init(string: "XXXXXXXXXXX") 
    stream?.hostName = "XXXXXXXXX" 
    stream?.hostPort = 5222 
    do { 
     try stream?.connect(withTimeout: XMPPStreamTimeoutNone) 
    } catch { 
     print("error connecting") 
    } 
} 

func xmppStreamDidConnect(sender: XMPPStream) { 
    print("connected!") 
    do { 
     try sender.authenticate(withPassword: "XXXXXXXXXX") 
    } catch { 
     print("error registering") 
    } 
    } 
} 
+0

# 타일러 페레이라 (Tyler Pereira) 당신은 어떤 해결책이 있습니까, 나는 또한 같은 문제에 직면 해 있습니다. – Manish

+0

@Tyler Pereira, 임 또한 같은 문제가 발생했습니다. – Bucket

+0

아니요 해결책을 찾지 못했습니다. XMPP를 사용하지 않는 채팅 시스템을 만들기 위해 내 자신의 논리를 고수했다. –

답변

0

위임 방법이 올바르지 않다고 생각합니다. 당신은 아래의 위임 방법으로 시도 할 수 있습니다 :

@objc func xmppStreamDidConnect(_ sender: XMPPStream!) { 
    //write your code here. 
} 
0

는이

do { 
     try self.xmppController = XMPPController(hostName: server, 
               userJIDString: userJID, 
               password: userPassword) 
     self.xmppController.xmppStream.addDelegate(self, delegateQueue: DispatchQueue.main) 
     self.xmppController.connect() 
    } catch { 
     sender.showErrorMessage(message: "Something went wrong") 
    } 

XMPPController

class XMPPController: NSObject { 
var xmppStream: XMPPStream 

let hostName: String 
let userJID: XMPPJID 
let hostPort: UInt16 
let password: String 

init(hostName: String, userJIDString: String, hostPort: UInt16 = 5222, password: String) throws { 
    guard let userJID = XMPPJID(string: userJIDString) else { 
     throw XMPPControllerError.wrongUserJID 
    } 

    self.hostName = hostName 
    self.userJID = userJID 
    self.hostPort = hostPort 
    self.password = password 

    // Stream Configuration 
    self.xmppStream = XMPPStream() 
    self.xmppStream.hostName = hostName 
    self.xmppStream.hostPort = hostPort 
    self.xmppStream.startTLSPolicy = XMPPStreamStartTLSPolicy.allowed 
    self.xmppStream.myJID = userJID 

    super.init() 

    self.xmppStream.addDelegate(self, delegateQueue: DispatchQueue.main) 
} 

func connect() { 
    if !self.xmppStream.isDisconnected() { 
     return 
    } 

    try! self.xmppStream.connect(withTimeout: XMPPStreamTimeoutNone) 
}} 

나를 위해 작동 해보십시오. 이 줄에주의를 기울여야합니다.

try self.xmppController = XMPPController(hostName: server, 
               userJIDString: userJID, 
               password: userPassword) 
+0

나는이 해결책을 찾았다. [link] (https://github.com/inaka/ios-xmpp-sample) –

0

나는 동일한 문제가있었습니다. 필자의 경우 (튜토리얼을 따랐을 때) 객체는 글로벌하지 않았고 델리게이트는 아무 것도되지 않았다. 그것이 호출되지 않은 이유입니다. XMPPStreamDelegate를 전역 적으로 구현하는 개체를 저장해야합니다.

관련 문제