2010-07-04 38 views
9

Tôi đã viết trang kiểm tra php chỉ gửi thông báo đẩy chung và hoạt động liên tục. Đôi khi nó cung cấp thông báo và lần khác tôi nhận được lỗi này:Lỗi thông báo đẩy: "Không thể đặt tệp chuỗi địa phương"

"Thông điệp: stream_socket_client() [function.stream-socket-client]: Không thể đặt tệp chuỗi địa phương '/var/www/ninerobot.com/ công khai/mlb/certs/mlbtr-push-dev.pem '; Kiểm tra cài đặt quán cà phê/capath của bạn bao gồm thông tin chi tiết về chứng chỉ của bạn và tổ chức phát hành "

Bạn có biết cách giải quyết vấn đề này không?

Tôi thấy rằng trên tài liệu của Apple, nó nói "Lưu ý: Để thiết lập phiên TLS với APN, chứng chỉ gốc của Entrust Secure CA phải được cài đặt trên máy chủ của nhà cung cấp. Nếu máy chủ đang chạy Mac OS X, chứng chỉ gốc này là đã có trong keychain. Trên các hệ thống khác, chứng chỉ có thể không có sẵn. Bạn có thể tải xuống chứng chỉ này từ trang web Chứng chỉ Entrust SSL. " Điều này có nghĩa là bất cứ điều gì mà tôi cần phải làm?

+0

việc này có được giải quyết không? tôi đang gặp vấn đề tương tự. –

Trả lời

7

Sử dụng danh sách kiểm tra này để làm việc thông qua này:

  1. Bạn có tạo ra một giấy chứng nhận hợp pháp qua hướng dẫn như these.
  2. Có phải tệp .pem của bạn có thể đọc được bởi quy trình máy chủ web của bạn (ví dụ: quyền và vị trí tệp là tốt) không? Nhiều thiết lập chạy apache, ví dụ: trong nhóm người dùng "www-data". Lưu ý phụ: đảm bảo khách truy cập không thể xem tệp .pem bằng cách duyệt qua tệp đó.
  3. Máy chủ của bạn có cài đặt Giấy chứng nhận gốc CA ủy thác an toàn (2048 bit) không? Nếu không, hãy làm theo hướng dẫn để tải xuống/cài đặt cho hệ điều hành máy chủ cụ thể của bạn.
  4. Có phải cổng TCP đi 2195 mở? Nhiều nhà cung cấp dịch vụ lưu trữ KHÔNG có cổng thư đi này mở theo mặc định.
+0

4. cách kiểm tra xem cổng 2195 có đang mở không? Từ thiết bị đầu cuối, tôi đã làm 'telnet gateway.sandbox.push.apple.com 2195' và nó cho thấy' Đang thử 17.149.34.66 ... Được kết nối với gateway.sandbox.push-apple.com.akadns.net.' Sau đó, sau một số thời gian, nó đóng cửa bởi chính nó nói rằng *** Kết nối đóng cửa bởi máy chủ nước ngoài. *** ...... Điều đó có bình thường không? –

+0

2. tôi không chắc liệu tệp pem có thể đọc được hay không. Khi tôi duyệt đến tệp pem thông qua trình duyệt của tôi, nó hiển thị một trang trống. Nhưng khi tôi thực hiện 'cat path/to/file.pem' trong terminal, tôi thấy nội dung chứng chỉ của tệp pem –

+0

Cho phép tệp' .pem' giải quyết vấn đề. – Qazi

11

Tôi cũng gặp nhiều khó khăn hơn để làm điều tương tự. Cuối cùng tôi tìm thấy giải pháp để gửi thông báo đẩy thông qua url toàn cục PHP. Hãy thử các bước dưới đây. Trước đó tôi hy vọng tất cả các bạn biết để tạo ra 3 giấy chứng nhận thats PushChat.certSigningRequest, pushkey.p12 & aps_development.cer (csr, p12, cer)

Mở Terminal và từng bước chạy các lệnh dưới đây:

# Make sure terminal refers your correct certificate path. 
$ cd ~/Desktop/ 

# Ask system administrator to open if its not connected 
$ telnet gateway.sandbox.push.apple.com 2195 

Trying 17.110.227.35... 
Connected to gateway.sandbox.push-apple.com.akadns.net. 

Escape character is '^]'. 

# Convert .cer to .pem 
$ openssl x509 -in aps_development.cer -inform der -out PushCert.pem 

# Convert .p12 to .pem. Enter your pass pharse which is the same pwd that you have given while creating the .p12 certificate. PEM pass phrase also same as .p12 cert. 
$ openssl pkcs12 -nocerts -out PushKey1.pem -in pushkey.p12 

Enter Import Password: 

MAC verified OK 

Enter PEM pass phrase: 

Verifying - Enter PEM pass phrase: 

# To remove passpharse for the key to access globally. This only solved my stream_socket_client() & certificate capath warnings. 
$ openssl rsa -in PushKey1.pem -out PushKey1_Rmv.pem 

Enter pass phrase for PushChatKey1.pem: 

writing RSA key 

# To join the two .pem file into one file: 
$ cat PushCert.pem PushKey1_Rmv.pem > ApnsDev.pem 

Sau đó Cuối cùng, di chuyển tệp SimplePush.php đến vị trí tệp ApnsDev.pem. Cả hai tệp sẽ nằm trong cùng một thư mục. và thay đổi Mã thông báo thiết bị, Cụm từ mật khẩu, Tên chứng chỉ (ApnsDev.pem), Tin nhắn… Trong tệp simplepush.php Tải xuống tệp bằng URL bên dưới. http://d1xzuxjlafny7l.cloudfront.net/downloads/SimplePush.zip Sau đó chạy file trong thiết bị đầu cuối hoặc máy chủ tên miền của bạn

$ php simplepush.php 

hoặc

www.Domainname.com/push/simplepush.php // Now, url shows 'Connected to APNS Message successfully delivered'. 

Thats nó, thông báo push sẽ bay và đạt được các thiết bị IOS cụ thể.

Nếu bạn muốn gửi 'Badge' rồi thay đổi mã tải trọng trong simplepush.php như dưới đây,

// Construct the notification payload body: 

$badge = 1; 

$sound = 'default'; 

$body = array(); 

$body['aps'] = array('alert' => $message); 

if ($badge) 

    $body['aps']['badge'] = $badge; 

if ($sound) 

    $body['aps']['sound'] = $sound; 


// End of Configurable 

// Encode the payload as JSON: 

$payload = json_encode($body); 

Bây giờ chạy file php một lần nữa và vào biểu tượng ứng dụng xuất hiện với số huy hiệu trong vòng tròn màu đỏ.

+0

các bước của bạn trên thiết bị đầu cuối đã hoạt động với tôi. Cảm ơn – daniherculano

+0

Rất vui khi được nghe :) – Anuprabha

0

Ngoài câu trả lời hay của Steve N, hãy để tôi thêm điểm cuối cùng.

  1. Đảm bảo bạn hiểu cảnh báo, đặc biệt là bao gồm chi tiết chứng chỉ của bạn và tổ chức phát hành chứng chỉ. Có thể bạn không có một khối trong tệp .pem của mình, tức là issuer=, subject= v.v. và tệp của bạn bắt đầu bằng -----BEGIN CERTIFICATE. Nó có thể vô tình bị xóa trong quá trình chuyển đổi tệp chứng chỉ.
Các vấn đề liên quan