Метод PHP для запросов Сервера Обратной связи APNs

Можно получить эту информацию от SERVER_SOFTWARE переменная. Это возвратит следующее:

Microsoft-IIS/5.0 (Windows 2000)
Microsoft-IIS/5.1 (Windows XP)
Microsoft-IIS/6.0 (Windows 2003 Server)

и т.д.

при использовании ASP.NET можно получить эту строку через [1 111]

Request.ServerVariables["SERVER_SOFTWARE"];

РЕДАКТИРОВАНИЕ: кажется, что необходимо будет запросить реестр для получения этой информации. Смотрите на эта страница , чтобы видеть как.

30
задан Machavity 16 February 2017 в 21:08
поделиться

4 ответа

Я получил решение на форуме Apple, и оно предназначено для разработки. Попробуйте это и для производства.

"Ну, как бы глупо это ни звучало, я нашел решение:

Создайте фиктивный идентификатор приложения на программном портале, включите для него push-уведомления разработки Создайте и загрузите связанный профиль обеспечения Создайте новый проект xcode и вызовите метод registerForRemoteNotificationTypes при запуске. Установите фиктивное приложение на свое устройство. На этом этапе у вас должны быть запущены два приложения РАЗРАБОТКА на вашем устройстве: исходное приложение и фиктивное приложение. Оба должны быть зарегистрированы для получения push-уведомлений. Удалите исходное приложение и попробуйте отправить ему push-уведомление. Вызовите службу обратной связи, и вы получите данные обратно ».

1
ответ дан 27 November 2019 в 23:26
поделиться

Этот код выглядит правильно, однако вам нужно выполнить цикл и проверить конец потока, чтобы прочитать все коды устройств.

 while (!feof($apns)) {
        $devcon = fread($apns, 38);
 }

Однако моя проблема заключается в фактической распаковке данных. Кто-нибудь знает, как распаковать двоичные данные, которые вы только что прочитали, чтобы получить фактический идентификатор устройства (в виде строки) вместе с отметкой времени и т. Д.?

2
ответ дан 27 November 2019 в 23:26
поделиться

Это, наконец, сработало для меня.

$arr = unpack("H*", $devconts); 
$rawhex = trim(implode("", $arr));

$feedbackTime = hexdec(substr($rawhex, 0, 8)); 
$feedbackDate = date('Y-m-d H:i', $feedbackTime); 
$feedbackLen = hexdec(substr($rawhex, 8, 4)); 
$feedbackDeviceToken = substr($rawhex, 12, 64);

А затем вы просто проверяете токен устройства по метке времени!

0
ответ дан 27 November 2019 в 23:26
поделиться

Вот большая загвоздка, которая смутила меня, когда я впервые попробовал подключиться: серверы обратной связи APNS возвращают только те токены устройств, которые "истекли" с момента вашего последнего запроса обратной связи. Это означает, что в большинстве случаев вы получите ответ NULL, если только вы не имеете дело с большим количеством пользователей вашего приложения.

Поэтому убедитесь, что вы сохранили токены устройств с истекшим сроком действия на диск или в базу данных, потому что после запроса обратной связи они пропадают навсегда. Это делает тестирование, мягко говоря, неприятным!

Вот полная функция для получения маркеров устройств с серверов обратной связи APNS (большое спасибо авторам ответов выше за то, что помогли мне собрать все вместе):

function send_feedback_request() {
    //connect to the APNS feedback servers
    //make sure you're using the right dev/production server & cert combo!
    $stream_context = stream_context_create();
    stream_context_set_option($stream_context, 'ssl', 'local_cert', '/path/to/my/cert.pem');
    $apns = stream_socket_client('ssl://feedback.push.apple.com:2196', $errcode, $errstr, 60, STREAM_CLIENT_CONNECT, $stream_context);
    if(!$apns) {
        echo "ERROR $errcode: $errstr\n";
        return;
    }


    $feedback_tokens = array();
    //and read the data on the connection:
    while(!feof($apns)) {
        $data = fread($apns, 38);
        if(strlen($data)) {
            $feedback_tokens[] = unpack("N1timestamp/n1length/H*devtoken", $data);
        }
    }
    fclose($apns);
    return $feedback_tokens;
}

Если все в порядке, возвращаемые значения из этой функции будут выглядеть примерно так (через print_r()):

Array
(
    Array
    (
        [timestamp] => 1266604759
        [length] => 32
        [devtoken] => abc1234..............etcetc
    ),
    Array
    (
        [timestamp] => 1266604922
        [length] => 32
        [devtoken] => def56789..............etcetc
    ),
)
69
ответ дан 27 November 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: