2015-10-01 4 views
0

На самом деле я новичок в APNS, и я использую некоторую помощь от онлайновых форумов и блогов. Я использую PHP для реализации серверной части. Ниже приведен мой код PHPAPNS push уведомления не отправляются

<?php 

// Put your device token here (without spaces): 
$deviceToken = '0f744707bebcf74f9b7c25d48e3358945f6aa01da5ddb387462c7eaf61bbad78'; 

// Put your private key's passphrase here: 
$passphrase = 'pushchat'; 

// Put your alert message here: 
$message = 'My first push notification!'; 

//////////////////////////////////////////////////////////////////////////////// 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

// Open a connection to the APNS server 
$fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err, 
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

if (!$fp) 
    exit("Failed to connect: $err $errstr" . PHP_EOL); 

echo 'Connected to APNS' . PHP_EOL; 

// Create the payload body 
$body['aps'] = array(
    'alert' => $message, 
    'sound' => 'default' 
    ); 

// Encode the payload as JSON 
$payload = json_encode($body); 

// Build the binary notification 
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; 

// Send it to the server 
$result = fwrite($fp, $msg, strlen($msg)); 

if (!$result) 
    echo 'Message not delivered' . PHP_EOL; 
else 
    echo ' 

'. PHP_EOL;

// Close the connection to the server 
fclose($fp); 

Я преобразовал P12-файл в файл PEM и назвал его ck.pem и принимал его на то же место, что находится в файле PHP. Когда я выполняю файл PHP, печатается следующее. Есть что-то, чего я не вижу. Я сомневаюсь в части сертификата.

Connected to APNS 
Message successfully delivered 

ответ

0

Я фактически заменил UDID устройства на токен устройства, и он работает как шарм. Вы больше не можете использовать UDID.

1

У меня была точно такая же проблема, используя тот же самый пример кода - отлично работает для андроид, но не для IOS без каких-либо возвращающейся ошибки.

Чтобы исправить мою проблему, я должен создать SSL сертификат снова против приложения, а затем запустить

openssl x509 -in aps_development.cer -inform der -out aps_development.pem 

openssl pkcs12 -nocerts -out aps_developmentKey.pem -in ios_development.p12 

cat aps_development.pem aps_developmentKey.pem > ck.pem 

Finially испытаны против: OpenSSL s_client -connect gateway.sandbox.push.apple.com:2195 - cert aps_development.pem -key aps_development.pem -CAfile entrust_2048_ca.cer

После этого все сработало отлично, это было на 29 сентября - теперь он перестает работать, поэтому я снова думаю, что его Certs, но по крайней мере это может помочь вам с ваше решение.

+0

Можете ли вы прояснить ситуацию? Я работал с SSL много раз раньше. Но это не обычное право SSL? Итак, можете ли вы провести меня через серверную часть следующего? Установка этого SSL на сервере (сведения о пути и все) И следующие две строки? stream_context_set_option ($ ctx, 'ssl', 'local_cert', 'ck.pem'); stream_context_set_option ($ ctx, 'ssl', 'passphrase', $ passphrase); В моем коде, какие соглашения об именах следует использовать для обозначения файла ck.pem? Могу ли я переименовать файл PEM на что-нибудь? –

Смежные вопросы