2012-11-18 36 views
8

Tôi đang cố gắng để đá quý APNS hoạt động với ứng dụng Rails của tôi. Ban đầu tôi đã thiết lập điều này vài tháng trước và việc đẩy thông báo tới thiết bị iOS đã hoạt động hiệu quả. Bây giờ, ứng dụng của tôi đang hoạt động và tôi thấy rằng các thông báo sẽ không còn nữa. Các APNS gem đã không được cập nhật trong một thời gian, vì vậy tôi đã thử nhiều dĩa sau này của nó, tất cả đều có hiệu lực tương tự.Ruby apns gem return nil

Đây là những gì tôi đang làm:

APNS.host = 'gateway.push.apple.com' 
APNS.pem = Rails.root + "lib/push_production.pem" 
APNS.port = 2195 
APNS.send_notification(device_token, "Test send") 

Và kết quả?

=> nil 

Không có phản hồi từ bất kỳ phương pháp nào, không có logfile mà tôi có thể kiểm tra. Tôi đã thử tạo và tạo lại chứng chỉ của mình; mọi thứ có vẻ ổn. Tôi đã cố gắng thể hiện mã thông báo thiết bị của mình theo nhiều cách khác nhau, không có dấu ngoặc nhọn, không có dấu cách giữa các nhóm ký tự ... APNS không quan tâm.

Với số lượng bộ phận chuyển động liên quan đến điều này, tôi biết đây là một câu hỏi khó. Nhưng bất cứ ai có thể đề nghị nơi để tìm?

Trả lời

2

Tôi tin rằng tôi đã tìm thấy câu trả lời. Sau khi đăng ký một tài khoản với Urban Airship, tôi đã thử gửi một tin nhắn thử nghiệm đến điện thoại của tôi, và một lần nữa vô ích. Nhưng những người này thực sự có hành động của họ với nhau, vì vậy họ đã có thể cho tôi thấy thông báo lỗi! Hóa ra mã thông báo thiết bị của tôi không hợp lệ. Tại sao? Bởi vì nó được tạo ra bởi phiên bản sandboxed của ứng dụng.

Có, ứng dụng của tôi nằm trong cửa hàng, nhưng hóa ra là hồ sơ phân phối App Store của tôi đã được tạo trước khi quyền được thông báo đẩy được thêm vào. Vì vậy, khi bạn chạy công cụ codesign trên tệp thực thi của tôi, nó không hiển thị quyền. Dưới đây là ví dụ:

Diomedes:Release-iphoneos aaron$ codesign -dvvvv --entitlements - Tiberius.app 

Lệnh đó sẽ hiển thị một plist chứa khóa có giá trị "sản xuất". Bản phát hành của tôi không có chìa khóa đó chút nào.

Tôi đã thực sự bị buộc phải tạo hồ sơ phân phối hoàn toàn mới trong Cổng cấp phép, cuối cùng đã bao gồm các quyền chính xác. Tôi chưa thể kiểm tra điều này (8 ngày App Store xem xét, bất cứ ai?) Nhưng tôi cảm thấy như thế này là vấn đề.

P.S. This article trên trang web của Airship đô thị là công cụ giúp tôi.

2

Các official documentation nói điều này:

Nếu bạn gửi một thông báo và APN thấy thông báo bị thay đổi hoặc khó hiểu, nó sẽ trả một gói tin lỗi phản ứng trước để ngắt kết nối. (Nếu không có lỗi, APN không trả lại bất kỳ thứ gì.) Hình 5-3 mô tả định dạng của gói phản hồi lỗi.

Vì vậy, chỉ có nghĩa là đá quý không trả lại bất kỳ thứ gì, vì máy chủ của Apple không cho phép nó biết nó đang làm gì. Ngoài ra nếu bạn nhìn vào trang github của đá quý, các ví dụ đã cho không xử lý giá trị trả lại là APNS.send_notification.

Lần cuối cùng tôi làm việc với Thông báo đẩy của Apple, nó hoạt động khá giống một hộp đen, không trả lại bất cứ thứ gì phần lớn thời gian.

+0

tôi đã lưu ý những thiếu sót tương tự. Có một giải pháp cho vấn đề này? Bất kỳ cách nào để có được giá trị lỗi trả về? –

+0

Bạn cũng có thể thử ghi đè phương thức 'send_notifications' của đá quý và thử truy cập biến' ssl' trong đó để xem bạn có thể lấy gì từ nó (xem [mã trên github] (https://github.com/jpoz) /APNS/blob/master/lib/apns/core.rb)). Nhưng như đã nói trước đây vì APNS không trả lại bất cứ điều gì nếu (được cho là) ​​thành công, không có nhiều bạn có thể làm tôi sợ. 'ssl.write' sẽ chỉ cung cấp cho bạn số byte được viết để có thể không hữu ích lắm. – Raf

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