public function push(Notification $notification)
    {
        /**
         * Init curl, execute and close
         */
        $curl = curl_init();

        curl_setopt($curl, CURLOPT_URL, self::ENDPOINT);
        curl_setopt($curl, CURLOPT_USERAGENT, self::USER_AGENT);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $this->createPostFields($notification));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

        curl_exec($curl);
        $info = curl_getinfo($curl);
        curl_close($curl);

        /**
         * Handle result
         */
        switch ($info['http_code']) {
            case 201:
                return true;

            case 401:
                throw new InvalidAccessTokenException('Not Authorized: Access token not recognized');

            case 404:
                throw new NoDeviceAssociatedException('Not Found: No device associated with provided access token');
        }

        return false;
    }