1
안녕하세요, 명령 행에서 작동하는 푸시 알림을 보내고 있지만 PHP 웹 페이지로 실행하지 않는 것은 아닙니다.iOS 용 PHP 푸시 알림은 Apache에서 작동하지 않지만 명령 행에서 작동합니다.
경로는 올바른 apn 및 passphrase입니다 (정확히 동일한 코드).
페이지를 실행하지만 아파치가 호출 할 때 실패합니다.
Warning: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure in ..pushnotifications.php on line 31
Warning: stream_socket_client(): Failed to enable crypto in ..pushnotifications.php on line 31
Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in ..pushnotifications.php on line 31
Failed to connect: 0
코드 : 경로가 문제였다
public function iOS($data, $devicetoken, $sandbox) {
$deviceToken = $devicetoken;
$ctx = stream_context_create();
if($sandbox) {
stream_context_set_option($ctx, 'ssl', 'local_cert', __DIR__.'/apn/apns-dev-cert.pem');
} else {
stream_context_set_option($ctx, 'ssl', 'local_cert', __DIR__.'/apn/apns-prod-cert.pem');
}
stream_context_set_option($ctx, 'ssl', 'passphrase', self::$passphrase);
// Open a connection to the APNS server
// 'gateway.push.apple.com:2195'; //Production
// 'gateway.sandbox.push.apple.com:2195'; // Sandbox
if($sandbox) {
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
} else {
$fp = stream_socket_client(
'ssl://gateway.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
}
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
// Create the payload body
$body['aps'] = array(
'alert' => array(
'title' => $data['title'],
'body' => $data['body'],
),
'sound' => $data['sound'],
'badge' => $data['badge']
);
// 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));
// Close the connection to the server
fclose($fp);
if (!$result)
return 'Message not delivered' . PHP_EOL;
else
return 'Message successfully delivered' . PHP_EOL;
}
31 행에 코드가 표시 될 수 있습니다. –
.pem 파일의 경로를 확인할 수 있습니까? –
$ sandbox = true; \t $를 msg_payload = 배열 ( \t \t '제목'=> '테스트', \t \t '몸'=>, \t \t '소리'=> '기본' '당신은 새로운 질서받은' \t \t 'badge'=> 3 \t); \t \t \t $ deviceToken = '994A7663BCA0D0EC75BC6923D27741CC1D2C1E089995EF0BF632185CAAFDCA35'; \t echo PushNotifications :: iOS ($ msg_payload, $ deviceToken, $ sandbox); –