授予成功后无法订阅频道

Can't subscribe to channel after granting does succeed

这就是我在 PHP 中所做的:

$pubnub = new Pubnub(array(
  'subscribe_key' => '<SUBSCRIBE_KEY>',
  'publish_key' => '<PUBLISH_KEY>',
  'secret_key' => '<SECRET_KEY>',
  'uuid' => $uuid,
));
$grants = $pubnub->grant(true, true, $channel, $auth_key, 0);

行得通。我的授权密钥和正确的访问得到了 200 响应。

然后我在 JS 中这样做:

var pubnub = PUBNUB.init({
  auth_key: settings.auth_key,
  subscribe_key: settings.subscribe_key,
  publish_key: settings.publish_key,
  uuid: settings.uuid,
});

pubnub.subscribe({
  channel: settings.channel,
  // auth_key: settings.auth_key,
  // uuid: settings.uuid,
  presence: function(m) {
    console.log('presence', m);
  },
  message: function(m) {
    console.log('message', m);
  }
});

并且每秒产生大约 10 403 个错误。我试过包括和排除一堆配置变量,比如 uuidauth_key,但我得到的只是很多 403。

如果我包含 origin: 'pubsub.pubnub.com'presence 事件会触发一次或两次,但仍然会出现一大堆 403。如果我不包含任何 origin,只有 403,没有事件。

在 JS 中做一个 here_now() 可以正常工作,但是 uuids 是空的,而 occupancy 是 0:

setInterval(function() {
  pubnub.here_now({channel: settings.channel}, function(rsp) {
    console.log('here_now', rsp);
  });
}, 2000);

为什么 PHP grant 有效,而 JS subscribe 无效?

PubNub 状态和访问管理器

任何时候您在 PubNub 中使用 Presence together with Access Manager(所有帐户免费提供),当您授予频道权限时,如果客户将监控在线状态(实施在线状态回调或在频道上启用在线状态 - 取决于 SDK 如何处理)。

$grants = $pubnub->grant(true, true, 'sports,sports-pnpres', $auth_key, 0);

此代码示例展示了如何在一次调用中授予多个通道。