/** * Send message to GCM * * @param Message $message The Message to send. * @param string $serverApiKey Server API Key. * @param string $gcmUrl GCM URL. * @param integer $nextDelay Next exponential back off delay. * * @return Response * @throws PhpGcmQueueException When request is malformed * @throws PhpGcmQueueException When authentication fails * @throws PhpGcmQueueException When an unknown error occurs */ public static function send(Message $message, $serverApiKey, $gcmUrl, $nextDelay = 1) { $curl = self::initCurl(); self::configCurl($curl, $serverApiKey); self::postCurl($curl, $gcmUrl, $message->toJson()); self::closeCurl($curl); if ($curl->error) { switch ($curl->http_status_code) { case 400: throw new PhpGcmQueueException('GCM\\Sender->send - Malformed Request: ' . $curl->raw_response, PhpGcmQueueException::MALFORMED_REQUEST); break; case 401: throw new PhpGcmQueueException('GCM\\Sender->send - Authentication Error', PhpGcmQueueException::AUTHENTICATION_ERROR); break; default: $retry = $curl->response_headers['retry-after']; if ($retry) { if ((int) $retry) { //in seconds: 120 $retry = \DateTime::createFromFormat('U', strtotime('now +' . (int) $retry . ' seconds')); } else { //absolute: Fri, 31 Dec 1999 23:59:59 GMT $retry = \DateTime::createFromFormat('U', strtotime($retry)); } return $retry; } else { //Timeout if ($curl->http_status_code >= 501 && $curl->http_status_code <= 599) { if ($nextDelay < self::MAX_RETRY_TIME) { return $nextDelay; } } throw new PhpGcmQueueException('GCM\\Sender->send - Unknown Error: ' . $curl->raw_response, PhpGcmQueueException::UNKNOWN_ERROR); } break; } } return new Response($message, $curl->response); }
$messageArray['time_to_live'] = $timeToLive; } if (!empty($restrictedPackageName)) { $messageArray['restricted_package_name'] = $restrictedPackageName; } if (isset($dryRun)) { $messageArray['dry_run'] = (bool) $dryRun; } //Payload if (!empty($data)) { $messageArray['data'] = json_decode($data, true); } if (!empty($notification)) { $messageArray['notification'] = json_decode($notification, true); } $message = \PhpGcmQueue\Message::fromArray($messageArray); $response = \PhpGcmQueue\Sender::send($message, $serverApiKey, $gcmUrl); } else { throw new Exception('Missing required fields'); } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>PHP GCM Queue Example</title> <meta name="description" content="PHP GCM Queue Example"> <meta name="author" content="stevetauber"> <meta name="viewport" content="width=device-width, initial-scale=1">