Android push-уведомление на многих устройствах одновременно с помощью Google C2DM - PullRequest
5 голосов
/ 02 января 2012

Я успешно реализовал push-уведомление для Android, используя google c2dm .Я всегда отправляю почтовый запрос на устройство, а задержка одного устройства составляет 1-2 секунды.Итак, если у меня 1000 устройств, моему сценарию потребуется более 1000 секунд, чтобы завершить отправку на все устройства.

Я хотел бы знать, можем ли мы отправить запрос на публикацию всех устройств в google c2dm?Если мы можем, как это сделать?

Я использую PHP-скрипт.

Вот мой код для отправки сообщения на устройство:

function sendMessageToPhone($authCode, $deviceRegistrationId, $msgType, $messageText, $infoType, $messageInfo) {

    $headers = array('Authorization: GoogleLogin auth=' . $authCode);
    $data = array(
        'registration_id' => $deviceRegistrationId,
        'collapse_key' => $msgType,
        'data.message' => $messageText,
        'data.type'    => $infoType,
        'data.data'    => $messageInfo
    );

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, "https://android.apis.google.com/c2dm/send");
    if ($headers)
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

    $response = curl_exec($ch);

    curl_close($ch);

    return $response;
}

Если яу меня есть больше устройств, я зацикливаю это так:

while($row = mysql_fetch_assoc($result)) {

    sendMessageToPhone($authCode, $row['deviceRegistrationId'], GOOGLE_MSG_TYPE, $messageText, $infoType, $messageInfo);

}

Спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 02 января 2012

Аутентификация - самое продолжительное (во времени) действие во всем процессе, поэтому, вероятно, у вас задержка в 1 секунду между каждым отправлением.

Чтобы ускорить процесс, вам не нужно каждый раз проходить аутентификацию. Просто авторизуйтесь один раз и получите токен аутентификации. Этот токен имеет определенный TTL, но Google ничего не указывает. Затем зациклите свои устройства и отправьте, используя предыдущий токен авторизации. Аутентификационный токен может изменяться (редко) и может быть найден в заголовке ответа Update-Client-Auth.

Весь процесс не должен занимать более нескольких сотен мсек на устройстве.

Также рассмотрите возможность использования stream вместо curl

0 голосов
/ 25 сентября 2012
function sendMessageToPhone($authCode, $deviceRegistrationId, $msgType, $messageText, $infoType, $messageInfo) {

    $headers = array('Authorization: GoogleLogin auth=' . $authCode);
    $data = array(
        'registration_id' => $deviceRegistrationId,
        'collapse_key' => $msgType,
        'data.message' => $messageText,
        'data.type'    => $infoType,
        'data.data'    => $messageInfo
    );

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, "https://android.apis.google.com/c2dm/send");
    if ($headers)
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

    $response = curl_exec($ch);

    curl_close($ch);

    return $response;
}
...