2017-03-17 17 views
1

iOSアプリケーションでXMPPサーバーに接続しようとしています。 XMPPFrameworksを使用していて、何らかの理由でXMPPストリームデリゲートがサーバーに接続しようとした後で呼び出されていません。私はそれがそうであるとは思わないので、私のコンピュータ上のサードパーティのXMPPアプリケーションを使用してログイン情報をダブルチェックしました。このデリゲートを正しく設定していませんか?間違った構文を使用していますか?ビューコントローラではなく、アプリケーションデリゲートでこれを設定する必要がありますか?どんな助けでも大歓迎です。以下は私のコードです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

#タイラーペレイラはあなたに何か解決策がありますか、同じ問題に直面しています。 – Manish

+0

@タイラー・ペレイラ、私も同じ問題を抱えています。 – 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をグローバルに実装するオブジェクトを格納する必要があります。

関連する問題