Make own custom plugin updatable via the Hub

Hi! We have created a custom helper plugin and added auto update functionality with the following code placed in the functions.php file:

add_action('init', 'auto_update_shortcut_plugin');

function auto_update_shortcut_plugin()
{
    require_once ('wp_autoupdate.php');
    $current_version = '1.2';
    $remote_path = 'https://www.domain.com/update.php';
    $plugin_slug = plugin_basename(__FILE__);
    new wp_auto_update ($current_version, $remote_path, $plugin_slug);
}

wp_autoupdate.php

<?php

  class wp_auto_update
{
    /**
     * The plugin current version
     * @var string
     */
    public $current_version;

    /**
     * The plugin remote update path
     * @var string
     */
    public $update_path;

    /**
     * Plugin Slug (plugin_directory/plugin_file.php)
     * @var string
     */
    public $plugin_slug;

    /**
     * Plugin name (plugin_file)
     * @var string
     */
    public $slug;

    /**
     * Initialize a new instance of the WordPress Auto-Update class
     * param string $current_version
     * param string $update_path
     * param string $plugin_slug
     */
    function __construct($current_version, $update_path, $plugin_slug)
    {
        // Set the class public variables
        $this->current_version = $current_version;
        $this->update_path = $update_path;
        $this->plugin_slug = $plugin_slug;

        list ($t1, $t2) = explode('/', $plugin_slug);
        $this->slug = str_replace('.php', '', $t2);

        // define the alternative API for updating checking
        add_filter('pre_set_site_transient_update_plugins', array(&$this, 'check_update'));

        // Define the alternative response for information checking
        add_filter('plugins_api', array(&$this, 'check_info'), 10, 3);
    }

    /**
     * Add our self-hosted autoupdate plugin to the filter transient
     *
     * param $transient
     * @return object $ transient
     */
    public function check_update($transient)
    {
        if (empty($transient->checked)) {
            return $transient;
        }

        // Get the remote version
        $remote_version = $this->getRemote_version();

        // If a newer version is available, add the update
        if (version_compare($this->current_version, $remote_version, '<')) {
            $obj = new stdClass();
            $obj->slug = $this->slug;
            $obj->new_version = $remote_version;
            $obj->url = $this->update_path;
            $obj->package = $this->update_path;
            $transient->response[$this->plugin_slug] = $obj;
        }

/*
        echo '<pre>';
        print_r($transient);
        echo '</pre>';
*/

        return $transient;
    }

    /**
     * Add our self-hosted description to the filter
     *
     * param boolean $false
     * param array $action
     * param object $arg
     * @return bool|object
     */
    public function check_info($false, $action, $arg)
    {
        if ($arg->slug === $this->slug) {
            $information = $this->getRemote_information();
            return $information;
        }
        return false;
    }

    /**
     * Return the remote version
     * @return string $remote_version
     */
    public function getRemote_version()
    {
        $request = wp_remote_post($this->update_path, array('body' => array('action' => 'version')));
        if (!is_wp_error($request) || wp_remote_retrieve_response_code($request) === 200) {
            return $request['body'];
        }
        return false;
    }

    /**
     * Get information about the remote version
     * @return bool|object
     */
    public function getRemote_information()
    {
        $request = wp_remote_post($this->update_path, array('body' => array('action' => 'info')));
        if (!is_wp_error($request) || wp_remote_retrieve_response_code($request) === 200) {
            return unserialize($request['body']);
        }
        return false;
    }

    /**
     * Return the status of the plugin licensing
     * @return boolean $remote_license
     */
    public function getRemote_license()
    {
        $request = wp_remote_post($this->update_path, array('body' => array('action' => 'license')));
        if (!is_wp_error($request) || wp_remote_retrieve_response_code($request) === 200) {
            return $request['body'];
        }
        return false;
    }
}

and the update.php file on the remote server:

<?php

if (isset($_POST['action'])) {
  switch ($_POST['action']) {
    case 'version':
      echo '1.3';
      break;
    case 'info':
      $obj = new stdClass();
      $obj->slug = 'shortcut1234.php';
      $obj->plugin_name = 'shortcut1234.php';
      $obj->new_version = '1.3';
      $obj->requires = '4.0';
      $obj->tested = '4.8.1';
      $obj->downloaded = 0;
      $obj->last_updated = '2017-12-09';
      $obj->sections = array(
        'description' => 'The new version of the Auto-Update plugin',
        'another_section' => 'This is another section',
        'changelog' => 'Some new features'
      );
      $obj->download_link = 'https://www.domain.com/update.php';
      echo serialize($obj);
    case 'license':
      echo 'false';
      break;
  }
} else {
    header('Cache-Control: public');
    header('Content-Description: File Transfer');
    header('Content-Type: application/zip');
    readfile('updateable_plugins/shortcut.zip');
}

The above works when updating the plugin via the WordPress admin menu but the update is not shown via The Hub. We are planning to install this helper plugin for a lot of customers so updating via The Hub would be a real time saver.

Am I missing any code to make it compatible with The Hub or is there any The Hub compatible tutorial for this functionality?