【问题标题】:Cannot connect to PubNub from swift application无法从 swift 应用程序连接到 PubNub
【发布时间】:2015-02-09 06:20:21
【问题描述】:

我正在尝试将 PubNub 合并到我的 swift 应用程序中。我已经通过 CocoaPods 安装了它,但无法让基本的“Hello World”应用程序正常工作。

我有一个符合 PNDelegate 协议的简单视图控制器:

class MessageViewController: CustomViewController, PNDelegate

在这个控制器的 ViewDidLoadMethod 中,我添加了以下内容:

    var config: PNConfiguration = PNConfiguration(forOrigin: "pubsub.pubnub.com", publishKey: Constants.PubNubPublishKey, subscribeKey: Constants.PubNubSubscribeKey, secretKey: Constants.PubNubSecretKey)
    var pubNub: PubNub = PubNub.clientWithConfiguration(config, andDelegate: self)
    pubNub.connect()


    // Define Channel
    var channel: PNChannel =  PNChannel.channelWithName("TestChannel", shouldObservePresence: true) as PNChannel


    // Subscribe on the channel
    PubNub.subscribeOn([channel])

    // Subscribe on the channel
    PubNub.sendMessage("Hello world", toChannel: channel)

我还在同一个视图控制器中添加了以下协议方法:

func pubnubClient(client: PubNub!, didReceiveMessage message: PNMessage!) {
    println(message.message)
}

当我运行应用程序时,大多数时候,一切都执行了,但 didReceiveMessage 函数从未被调用。有时,应用程序崩溃,并显示以下消息:

// Verify that reachability callback was called for correct client
NSCAssert([(__bridge NSObject *)info isKindOfClass:[PNReachability class]],
          @"Wrong instance has been sent as reachability observer");

根据基本的PubNub tutorial,以上应该足以让它工作。谁能帮我确定缺少什么?

谢谢!

编辑:相关信息;我目前正在模拟器上运行它。不使用实际设备会有什么问题吗?

【问题讨论】:

    标签: swift pubnub


    【解决方案1】:

    您不想将 PubNub 的单例版本与 pubnub 实例混合使用。在上面的代码中,您有时使用实例,有时使用 sharedInstance ...引用不一样。试试这个:(注意 subscribeOn..instance)

    var pnConfiguration: PNConfiguration!
    var pubNub: PubNub!
    pnConfiguration = PNConfiguration(origin: "pubsub.pubnub.com"
            ,publishKey: "demo"
            ,subscribeKey: "demo"
            ,secretKey: ""
            ,cipherKey: "")
    
    pubNub=PubNub.clientWithConfiguration(pnConfiguration,andDelegate:self)
            PNLogger.loggerEnabled(true)
            pubNub.connect()
    pubNub.subscribeOn([chnlGroup])
    pubNub.observationCenter.addMessageReceiveObserver(self){ (message: PNMessage!) -> Void in
                println("message go instance: { channel: \(message.channel), group: \(message.channelGroup), \nmsg: \(message.message)}");
            }
    

    【讨论】:

    • 哦哇哦,我现在是不是觉得很傻...谢谢你指出我的愚蠢行为:)这可能会因为离题而关闭。
    • 我做了完全相同的事情..花了我一些时间才弄清楚:)
    • @FrederickBrock 你能帮我弄清楚这个吗?看来新的 PubNub 它从 PNMessage 更改为 PNMessageResult stackoverflow.com/questions/31920108/…
    猜你喜欢
    • 2016-02-21
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 2019-02-08
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多