2010-10-08 28 views
5

Tôi đang cố gắng gửi thông báo đẩy lên iPhone của mình (APNS). Tôi đọc số này post và cố gắng triển khai nó. Vì vậy, tất cả các giấy chứng nhận của tôi là tốt (normaly).Dịch vụ Thông báo Đẩy của Apple với Tập lệnh PHP

Bây giờ tôi có kịch bản php này:

$device = '4f30e047 c8c05db9 3fa87e7d ca5325f7 738cb2c0 0b4a02d4 d4329a42 a7128173'; // My iphone deviceToken 
$payload['aps'] = array('alert' => 'This is the alert text', 'badge' => 1, 'sound' => 'default'); 
$payload['server'] = array('serverId' => $serverId, 'name' => $name); 
$output = json_encode($payload); 

$apnsCert = 'apple_push_notification_production.pem'; 

$streamContext = stream_context_create(); 
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert); 

$apns = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext); 

$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device)) . chr(0) . chr(strlen($payload)) . $payload; 
fwrite($apns, $apnsMessage); 

//socket_close($apns); seems to be wrong here ... 
fclose($apns);

Khi tôi chạy kịch bản này không có gì xảy ra. không có lỗi chỉ là một trang trống nhưng iPhone của tôi không nhận được thông báo đẩy ...

Bạn có ý tưởng không?

Cảm ơn rất nhiều!

Trả lời

6

không gian trong thẻ thiết bị, dải họ

3

Strip các không gian từ token và thậm chí sau đó nó không hoạt động sau đó

$apnsHost = 'gateway.sandbox.push.apple.com'; 

Remove "sandbox" từ url này và nó sẽ chạy.

2

Nếu bạn có nhiều thiết bị và bạn lặp qua chúng, tôi thấy rằng bạn phải tạo luồng_context_create mới cho từng fwrite để ngăn không cho kết nối của Apple bị đóng mã lỗi.

FYI

4

Đối với giấy chứng nhận phát triển bạn cần url

'ssl://gateway.sandbox.push.apple.com:2195'
nhưng đối với sản xuất
'ssl://gateway.push.apple.com:2195'

1

Để gửi thông báo thành công đầy đủ bạn phải làm 1 điều nữa.

Thay thế $ output = json_encode ($ payload);

to $ payload = json_encode ($ payload);

-1

Bạn thiếu chứng minh khóa cá nhân chứng chỉ. Thêm hàng này: stream_context_set_option ($ streamContext, 'ssl', 'passphrase', $ certificatePrivateKey);

Các vấn đề liên quan