Как установить SSL-сертификат для push-уведомлений?
У меня проблема с моей системой push-уведомлений для приложения для ios: она отлично работает в разработке, но не работает в производстве. Теперь у меня есть сомнения. Здесь https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ProvisioningDevelopment/ProvisioningDevelopment.html я прочитал, что сертификат pem должен быть "установлен" на сервере.
При разработке я скопировал только файл.pem для разработки в тот же каталог php-скрипта, который отправляет push-уведомления, и заставил его использовать его. В производстве (мое приложение работает в магазине приложений), я должен каким-то образом "установить" дистрибутив.pem на сервер?
Примечание: чтобы убедиться, что все идет правильно, я делаю:
$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if(!$fp){
print "All ok!";
}
а также
$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack ("n",strlen($payload)) . $payload;
print "sending message :" . $payload . "n to device:".$deviceToken."</br>";
$result=fwrite($fp, $msg);
if (!$result)
print "All ok!":
}
И даже в производстве, эти два не произвели никакой ошибки.
1 ответ
Вам не нужно больше, чем просто скопировать свой ssl-сертификат на сервер и ссылаться на него из своих сценариев, чтобы установить его.
Моя проблема заключалась в том, что в базе данных, содержащей мои токены устройств, которые отправляют уведомление, был какой-то токен устройства, сгенерированный моими устройствами разработки. Если вы отправляете токен разработки на производственный сервер Apple, он разрывает соединение, не давая вам отправлять любые другие уведомления по тому же соединению. Большое спасибо яблочный сервер!