почему я не могу подключиться к службе push-уведомлений Apple? - PullRequest
1 голос
/ 25 ноября 2010

У меня возникла большая проблема при разработке службы push-уведомлений Apple.

Я написал скрипт PHP (apns.php), который будет использовать PEM ( ck.pem * 1004).*) файл в качестве сертификата безопасности и создание SSL-соединения с APNS, когда я отправляю на него HTTP-запрос, но он всегда терпел неудачу при попытке подключиться к сервисному порту ( ssl://gateway.sandbox.push.apple.com:2195).Скрипт PHP развернут на Linux-хостинге GoDaddy (он должен поддерживать SSL).

Я уже зарегистрировался, чтобы быть участником программы для разработчиков iOS, и я зарегистрировал службу push-уведомлений Apple для своего приложения.И я сгенерировал файл сертификата и key file (cert.p12 and key.p12) из Keychain Access и перевел их в PEM files(cert.pem and key.pem) и соединил их в один (ck.pem) и поместил в тот же каталог скрипта PHP.

Я хочу знать, что-то не так я сделал!Будете ли вы ссылаться на вложение файлов, которые вам могут понадобиться?

Большое спасибо!

HTTP-запрос выглядит примерно так:

http://www.insidertracker.net/apns/apns.php?message=&badge=2&sound=received5.caf

Ниже ответное сообщение моего запроса :

Предупреждение: stream_socket_client() [function.stream-socket-client]: невозможно подключиться к ssl: //gateway.sandbox.push.apple.com: 2195 (соединение отклонено) в / home / content / 40/6967940 / html / apns / apns.php в строке 25 Не удалось подключиться 111 Соединение отклонено

PHP-скрипт :

<?php
$deviceToken = '0535dda1 6fd04e87 ed0a8194 d418a6c1 99eec462 8a871891 d062018d c6af4f99';
$pass = 'Php1234';   // Passphrase for the private key (ck.pem file)

// Get the parameters from http get or from command line
$message = $_GET['message'] or $message = $argv[1] or $message = 'You have an important message from InsiderTracker';
$badge = (int)$_GET['badge'] or $badge = (int)$argv[2];
$sound = $_GET['sound'] or $sound = $argv[3];

// Construct the notification payload
$body = array();
$body['aps'] = array('alert' => $message);
if ($badge)
   $body['aps']['badge'] = $badge;
if ($sound)
    $body['aps']['sound'] = $sound;

/* End of Configurable Items */
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');  
// assume the private key passphase was removed.
stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);

// connect to apns
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr,  60, STREAM_CLIENT_CONNECT, $ctx);
//  $fp = fsockopen('ssl://gateway.sandbox.push.apple.com:2195', 2195, $err, $errstr,  30);
 if (!$fp) {
    print "Failed to connect $err $errstr\n";
    return;
}
else {
   print "Connection OK\n<br/>";
}

// send message
$payload = json_encode($body);
$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack ("n",strlen($payload)) . $payload;
print "Sending message :" . $payload . "\n";  
fwrite($fp, $msg);
fclose($fp);
?>

Ответы [ 2 ]

2 голосов
/ 26 ноября 2010

Насколько я понимаю, GoDaddy запрещает исходящие соединения на экзотических портах (что угодно, кроме 80, возможно, несколько других).Вам, вероятно, не повезло, когда вы пытаетесь запустить свою собственную службу push-сообщений, размещенную на GoDaddy.Мне повезло, что вы пытались сделать то, что вы пытаетесь с помощью bluehost.

Для общих советов по разработке push-службы в PHP эти две статьи были неоценимы:

0 голосов
/ 11 апреля 2019

Я тоже получил эту ошибку.Следующие вещи, которые вы должны запомнить:

  1. Путь к файлу сертификата ios push должен быть правильным.Проверьте онлайн-порталы с помощью токена устройства и нажмите сертификат.
  2. Ваш сервер включен для порта 2195.Проверьте терминал с помощью команды telnet.
  3. Проверьте, поддерживается ли ssl вашей версией php при использовании ssl://gateway.sandbox.push.apple.com и tls при использовании tls://gateway.sandbox.push.apple.com
  4. Данные, которые вы отправляете в push-токене или т.байты, упомянутые в Apple Doc.ссылка указана ниже.

Вы также можете использовать ссылку api get для отправки push-сервера разработки: api.development.push.apple.com:443 Рабочий сервер: api.push.apple.com:443 https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html#//apple_ref/doc/uid/TP40008194-CH11-SW1

...