PubNub 不从服务发布

PubNub not publishing from Service

我之前使用后台服务中的 PubNub 在 android 上发布位置更新。我希望将它用于不同的项目并编写了一个简单的服务来测试新 API。然而,发布总是失败,我无法确定原因。

这里是服务代码:

public class MessageService extends Service {
    private static final String TAG = "MessageService";
    private PubNub pubnub;
    private Timer timer = new Timer();

    public MessageService() {
        PNConfiguration config = new PNConfiguration();
        config.setPublishKey("pub_key_removed_for_privacy");
        pubnub = new PubNub(config);
    }

    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            pubnub.publish()
                    .channel("demo")
                    .message("hello from service")
                    .async(new PNCallback<PNPublishResult>() {
                        @Override
                        public void onResponse(PNPublishResult result, PNStatus status) {
                            if (status.isError()) {
                                Log.e(TAG, "Publish failed");
                            } else {
                                Log.d(TAG, "Publish successful");
                            }
                        }
                    });
        }
    };

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        timer.schedule(task, 0, 5000);

        return START_REDELIVER_INTENT;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        timer.cancel();
    }

    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }

    private final IBinder binder = new ServiceBinder();

    public class ServiceBinder extends Binder {
        public MessageService getService() {
            return MessageService.this;
        }
    }
}

在 MainActivity 中,我只需调用 startService() 并查看日志,我总是会收到失败消息。我的清单中确实有互联网和 network_state 权限,但想不出任何其他原因导致它不起作用。有什么建议吗?

始终需要 PubNub 订阅密钥

您正在仅使用发布密钥初始化 PubNub。 subscribe key is always required when you config/init PubNub,即使你只是打算发布。

如果您没有使用订阅密钥初始化,或者它无效(打字错误或已禁用),那么当您尝试执行 PubNub 操作时,您将收到 400 - Invalid Subscribe Key error 响应(subscribepublishhistory 等)

public MessageService() {
    PNConfiguration config = new PNConfiguration();
    config.setPublishKey("your-pub-key");
    config.setSubscribeKey("your-sub-key");
    pubnub = new PubNub(config);
}