【问题标题】:Simple Corona SDK based example - can not subscribe through pubnub console基于简单 Corona SDK 的示例 - 无法通过 pubnub 控制台订阅
【发布时间】:2014-10-23 20:41:43
【问题描述】:

我正在尝试使用 Corona 运行默认的 pubnub Helloworld 示例。 corona sdk 程序在模拟器中运行良好,但由于某种原因我在 pubnub 控制台中看不到输出。这是 pubnub Corona SDK 的源代码。

require "pubnub"

multiplayer = pubnub.new({
    publish_key   = "my_publish_key",
    subscribe_key = "my_subscribe_key",
    secret_key    = nil,
    ssl           = nil,
    origin        = "pubsub.pubnub.com"
})

multiplayer:subscribe({
    channel  = "hello-world-corona",
    callback = function(message)
      print(message.msgtext)
    end,
    errorback = function()
      print("Oh no!!! Dropped 3G Conection!")
    end
})

function send_a_message(text)
  multiplayer:publish({
     channel = "hello-world-corona",
     message = { msgtext = text }
   })
end

function send_hello_world()
  send_a_message("Hello World!!!")
end

timer.performWithDelay( 500, send_hello_world, 10 )
send_hello_world()

我正在使用 pubnub 提供的订阅和发布密钥

为了创建 API 密钥,我使用了 pubnub 中的这些库: https://github.com/pubnub/lua

问题是,当我为 Android 构建 APK 并运行它时,我无法在 http://www.pubsub.com/console 的 pubsub 控制台上看到消息。我使用给定的订阅和发布密钥,但什么也没看到。我收到了 Internet 权限的运行时错误,但随后将我的 build.settings 更改为以下内容,不再出现运行时错误:

build.settings:

   settings =
{ 
android =
   {
    permissions =
        {
            { name = ".permission.C2D_MESSAGE", protectionLevel = "signature" },
        },
        usesPermissions =
        {
           -- Required by the MapView to fetch its contents from the Google Maps 
           --servers.
            "android.permission.INTERNET",
            "android.permission.GET_ACCOUNTS",
            "android.permission.RECEIVE_BOOT_COMPLETED",
            "com.google.android.c2dm.permission.RECEIVE",
            ".permission.C2D_MESSAGE",


          -- Optional permission used to display current location via the GPS.
            "android.permission.ACCESS_FINE_LOCATION",

          -- Optional permission used to display current location via WiFi or 
          -- cellular   
          -- service.
          "android.permission.ACCESS_COARSE_LOCATION",
      },
      usesFeatures =
      {
          -- If you set permissions "ACCESS_FINE_LOCATION" and 
          --"ACCESS_COARSE_LOCATION" above, then you may want to set up 
          --your app to not require location services as follows.
          -- Otherwise, devices that do not have location sevices (such as a GPS) will 
          -- be unable
          -- to purchase this app in the app store.
            { name = "android.hardware.location", required = false },
            { name = "android.hardware.location.gps", required = false },
            { name = "android.hardware.location.network", required = false },
        },
   }, 
}

【问题讨论】:

  • 注意,从 Corona 模拟器运行时我也看不到消息。不确定我应该可以吗?

标签: lua coronasdk pubnub


【解决方案1】:

请添加成功和错误回调,并在您的问题中告诉我们您得到了什么,以及是来自成功回调还是错误回调。

成功和错误回调的实现示例见https://github.com/pubnub/lua/blob/master/corona/examples/example-publish/main.lua#L29

杰瑞米

【讨论】:

  • 应用运行良好,只要我使用 subscribe_key = "demo" 和 publish_key="demo" 就可以发布到上面的聊天应用。当我将钥匙放入 Corona Button 应用程序时,聊天应用程序中没有收到任何数据。一切都完美执行。
  • 很奇怪。您介意通过 support@pubnub.com 与我们联系,以便我们隔离问题吗?
【解决方案2】:

PubNub Corona SDK 调试发布事件

确保注册 error 回调以检测发布调用事件的问题。下面是一个功能齐全的 pubnub.publish({...}) 调用示例。

-- 
-- CALL PUBLISH FUNCTION
--
function publish( channel, text )
    pubnub_obj:publish({
        channel  = channel,
        message  = text,
        callback = textout,
        error    = textout
    })
end

完整的 Lua 发布演示示例:

使用它来测试您的 lua corona 应用程序是否成功发布消息。您将看到用于调试代码的文本输出。

--
-- PubNub : Publish Example
--

require "pubnub"
require "PubnubUtil"

textout = PubnubUtil.textout

--
-- INITIALIZE PUBNUB STATE
--
pubnub_obj = pubnub.new({
    publish_key   = "demo",
    subscribe_key = "demo",
    secret_key    = nil,
    ssl           = nil,
    origin        = "pubsub.pubnub.com"
})

-- 
-- HIDE STATUS BAR
-- 
display.setStatusBar( display.HiddenStatusBar )

-- 
-- CALL PUBLISH FUNCTION
--
function publish(channel, text)
    pubnub_obj:publish({
        channel = channel,
        message = text,
        callback = function(r) --textout(r) 
        end,
        error = function(r) textout(r) 
        end
    })
end

-- 
-- MAIN TEST
-- 
local my_channel = 'lua-dsm'

--
-- Publish String
--
publish("abcd", 'Hello World!' )

--
-- Publish Dictionary Object
--
publish("efgh", { Name = 'John', Age = '25' })

--
-- Publish Array
--
publish("ijkl", { 'Sunday', 'Monday', 'Tuesday' })

在我们的文档页面中查看使用JavaScript Publish API Reference 发布的消息。

【讨论】:

  • 谢谢。我不确定我会在哪里看到这些消息。当我在 Android 上运行它时,我根本看不到任何消息。当我在模拟器中运行它时,我看不到任何东西,因为该应用程序只是发布数据但没有显示任何内容。假设我应该能够从 pubnub.com/console 的 pubnub 控制台中读取从 Android 应用程序发送的消息,我是否正确?将控制台的屏幕截图发送到 support@pubnub.com。
  • 检查textout的定义或者改变这个函数的定义来打印输出位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多