2012-07-09 64 views
5

Tôi nhận được lỗi này sau khi cố gắng thực thi tập lệnh php của tôi để gửi thông báo đẩy tới iphone của tôi.Thông báo đẩy trong PHP

Tôi đã thử mọi thứ và không có gì hiệu quả. Tôi tin rằng điều này có nghĩa là ck.pem của tôi là sai nhưng tôi không chắc liệu key.pem của nó hoặc cert.pem có sai hay không.

Xin giúp

Script

// This this a fake device id: 
$deviceToken = '9870h8v088bj29u080af894jj67klfgcv9mmm79k8e4l23456h908743n093e359'; 

// fake password: 
$passphrase = '123456'; 

// Put your alert message here: 
$message = 'New Message'; 
    //////////////////////////////////////////////////////////////////////////////// 

$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', 
        'badge' => '1' 
        ); 

// 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 'Message successfully delivered' . PHP_EOL; 

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

?> 

Lỗi

Warning: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: 
error:14094416:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown in  /Users/daveking/Desktop/App Certificates/simplepush.php on line 21 

Warning: stream_socket_client(): Failed to enable crypto in /Users/daveking/Desktop/App Certificates/simplepush.php on line 21 

Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /Users/daveking/Desktop/App Certificates/simplepush.php on line 21 
Failed to connect: 0 
+0

Có thể trùng lặp: http://stackoverflow.com/questions/6372308/apns-ssl-gateway-sandbox-push-apple-com2195-connection-fails –

+1

@TimNhững điều này không giúp tôi. Nó là hơi tương tự vì chúng đối phó với các thông báo đẩy nhưng nó không giống nhau. – BigT

+0

có thể là trọng tải của bạn có kích thước lớn hơn 256 byte được Apple cho phép, do đó nó có thể gây ra 'fwrite' hoặc lỗi này - tôi gặp vấn đề này –

Trả lời

6

Những gì bạn đã cố gắng một cách chính xác?

http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12 http://www.raywenderlich.com/3525/apple-push-notification-services-tutorial-part-2

Đây là một hướng dẫn tốt vào việc tạo ra các giấy chứng nhận, làm cho kịch bản php, vv

+0

Đó là hướng dẫn tôi đã tạo trong ck.pem của tôi. Tôi đã sử dụng mà simplepush.php ở trên nhưng như tôi đã nói tôi nhận được những lỗi – BigT

+0

Chỉ cần có nó để làm việc. Tập tin cer của tôi đã bị hỏng một số làm thế nào để tôi cài đặt lại nó và đã đi qua các hướng dẫn một lần nữa. Cảm ơn – BigT

3

Một liên kết tốt trong đó mô tả các bước có thể được tìm thấy dưới http://blog.boxedice.com/2009/07/10/how-to-build-an-apple-push-notification-provider-server-tutorial/

Một liên kết tốt để có được đầu của bạn xung quanh các vấn đề giấy chứng nhận, kiểm tra Urban Airship:

http://urbanairship.com/docs/keys.html

Và về việc phê duyệt , thật hữu ích khi biết:

=>app signed with a dev cert = sandbox url & dev apns cert, app signed with 

=>appstore/adhoc cert = prod url & prod apns cert 

cũng sử dụng ứng dụng adhoc/appstore trên thiết bị trước đây đã sử dụng ứng dụng dev sẽ khiến bàn đạp bị hỏng. (vì vậy về cơ bản cần hai thiết bị) (để được xác nhận.)

Quan trọng: bạn PHẢI giữ kết nối với hộp cát, tức là bạn KHÔNG được kết nối, gửi đẩy, ngắt kết nối. Nếu bạn làm thế, Apple có thể tăng tốc bạn như là một ddos ​​thể

Một PHP ví dụ kịch bản để kích hoạt thông báo đẩy từ một máy chủ có thể giống như thế này: Mã

<?php 

// from http://www.macoscoders.com/2009/05/17/iphone-apple-push-notification-service-apns/ 
// call: /apns/apns.php?message=Hello%20from%20macoscoders&badge=2&sound=received5.caf 

$deviceToken = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';       

// Passphrase for the private key (ck.pem file) 
// $pass = ; 
// Get the parameters from http get or from command line 

$message = $_GET['message'] or $message = $argv[1] or $message = 'Message sent ' . @date("H:i:s d/M/Y", mktime()); 
$badge = (int)$_GET['badge'] or $badge = (int)$argv[2] or $badge = 111; 
$sound = $_GET['sound'] or $sound = $argv[3] or $sound = 'chime'; 

// 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', 'push/apns-dev.pem'); 

// assume the private key passphase was removed. 
// stream_context_set_option($ctx, 'ssl', 'passphrase', $pass); 
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); 

if (!$fp) { 
    print "Failed to connect $err $errstr\n"; 
    return; 
} else { 
    print "Connection OK 

"; 
} 

$payload = json_encode($body); 

// request one 
$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); 

?> 
0

Làm việc ở đây:

<?php 

$deviceToken = '8845ba7c41e95e12caea6381ea6f01b5cd7b59a52feb9005e0727a65a4105dc2a0'; 

$passphrase = ''; 

$message = 'Your message'; 


$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; 


$body['aps'] = array(
    'alert' => array(
     'body' => $message, 
     'action-loc-key' => 'Bango App', 
    ), 
    'badge' => 2, 
    'sound' => 'oven.caf', 
    ); 

$payload = json_encode($body); 

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


$result = fwrite($fp, $msg, strlen($msg)); 

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

fclose($fp); 
Các vấn đề liên quan