2014-04-16 19 views
12

Tôi đang sử dụng phiên bản 2.1.2 của PushSharp. Ứng dụng này là .NET 4.5.1 (mặc dù tôi cũng đã thử nhắm mục tiêu .NET 4.5 và .NET 4)PushSharp Apple - Thư nhận được không mong muốn hoặc bị định dạng sai

Tôi đang cố gắng nhưng không thành công gửi tin nhắn push thông qua hộp cát Apple APNS.

Tôi gửi thành công thư bằng cách sử dụng tập lệnh PHP được cung cấp here on Ray Wenderlich's walkthrough bằng cùng một chứng chỉ và gửi đến cùng một ID thiết bị như đối với ứng dụng PushSharp của tôi.

Tôi đã kiểm tra bằng cách xuất cert đã hoàn thành dưới dạng p12 từ chuỗi khóa. Xuất chứng chỉ và khóa đã hoàn thành. Đang xuất khóa cá nhân. Cũng theo phương pháp được sử dụng here. Khi tôi kết hợp cert và key để sử dụng trong kịch bản PHP, tôi không có vấn đề gì.

Tôi đã nhập chứng chỉ p12 vào các máy tôi đã thử nghiệm từ - dường như không tạo sự khác biệt.

Tôi đã thử thay đổi cờ IsProduction khi đăng ký dịch vụ đẩy táo cho nhà môi giới đẩy. Không có lỗi khi nó được thiết lập như sản xuất (mặc dù đây là một cert sandbox) tuy nhiên nó rõ ràng là không nhận được thông qua để các thiết bị trong trường hợp đó hoặc.

Không ai trong số các thông điệp của tôi sẽ đi qua, tất cả có được một ngoại lệ dịch vụ trông giống như sau:

System.Security.Authentication.AuthenticationException: A call to SSPI failed, see inner exception. ---> System.ComponentModel.Win32Exception: The message received was unexpected or badly formatted 
--- End of inner exception stack trace --- 
at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception) 
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) 
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) 
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) 
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) 
at PushSharp.Apple.FeedbackService.Run(ApplePushChannelSettings settings, CancellationToken cancelToken) 
at PushSharp.Apple.ApplePushService.<>c__DisplayClass4.<.ctor>b__1(Object state) 

này về cơ bản là những gì mã của tôi trông giống như:

var push = new PushBroker(); 
// register event handlers for channel create/destroy/exception, notificationrequeue, serviceexception, notification sent 

var appleCert = File.ReadAllBytes(ConfigurationManager.AppSettings["CertAddress"]); 
push.RegisterAppleService(new ApplePushChannelSettings(false, appleCert, ConfigurationManager.AppSettings["CertPassword"])); 

var pn = new AppleNotification().ForDeviceToken(item.SendToDeviceIdentifier).WithAlert(item.AlertMessage).WithBadge(item.Badges); 

push.QueueNotification(pn); 

tôi nhận được kênh lên sự kiện được gọi, và sau đó là ngoại lệ dịch vụ.

Một số câu hỏi liên quan đến lỗi này có thể liên quan đến sự cố tường lửa - Tôi đã thử nghiệm ứng dụng của mình ở 2 mạng khác nhau có thể gửi thông báo đẩy (1 trong số đó hiện đang sử dụng ứng dụng PushSharp).

Mọi thông tin chi tiết sẽ được đánh giá cao.

+0

Tôi vừa đăng câu trả lời, hy vọng nó có thể hữu ích. http://stackoverflow.com/questions/23116726/pushsharp-notifications-to-ios-are-not-reaching-device/23121205#23121205 – dichen

Trả lời

30

Chúng tôi đã gặp sự cố tương tự bằng cách sử dụng thư viện APNS-Sharp hiện không được chấp nhận (tổ tiên cho PushSharp). Tôi đã gửi yêu cầu kéo cho APNS-Sharp để khắc phục sự cố dựa trên các thử nghiệm của tôi.

Việc sửa đổi là thay đổi (trong ApplePushChannel.cs)

stream.AuthenticateAsClient(this.appleSettings.Host, this.certificates, System.Security.Authentication.SslProtocols.Ssl3, false);     

để

stream.AuthenticateAsClient(this.appleSettings.Host, this.certificates, System.Security.Authentication.SslProtocols.Tls, false); 

tôi không tìm thấy một xác nhận về điều này, nhưng nó trông giống như giao thức SSL3 không còn được hỗ trợ bởi APNS Sandbox. Giống như những người khác báo cáo sự cố, thông báo của tôi chống lại APNS sản xuất vẫn hoạt động.

Bạn có thể tìm theo yêu cầu kéo ở đây:

https://github.com/Redth/PushSharp/pull/369/files

Cập nhật

Có một chủ đề trên trang web nhà phát triển của Apple về chủ đề này:

https://devforums.apple.com/thread/224320?tstart=0

Tuy nhiên, một số người có về chủ đề này hoặc trên chuỗi github. Vì vậy, thông tin là thiên vị chắc chắn. Một liên hệ mà tôi có tại Apple đang nói:

Mặc dù chưa có tài liệu chính thức, có vẻ như APNS đang chuyển sang TLS chứ không phải SSL (chỉ dựa trên thay đổi này - tôi chưa nghe bất kỳ điều gì chính thức) .

+1

Cảm ơn vì điều này! Yêu cầu kéo của bạn chính xác là thay đổi tôi đã thực hiện và nó hoạt động ngay bây giờ. – bean

+0

Không may mắn cho tôi. Tôi đã biên soạn phiên bản hiện tại, vì gói nuget chưa được cập nhật và tôi nhận được cùng một lỗi như trước đây ... mã lỗi HRESULT là -2146233087. Tôi không biết nếu điều này giúp ... – david

+0

Tôi đã thử theo liên kết đến diễn đàn nhà phát triển của Apple để giải thích trọng tâm từ SSL đến TLS và nó chỉ đi đến trang chủ Trung tâm Thành viên của tôi. –

2

Nếu bạn đang chạy ứng dụng này trên Windows Server 2003 (tôi biết), bạn sẽ phải chạy bản vá này hoặc bạn vẫn gặp lỗi lạ ngay cả sau khi bạn triển khai bản sửa lỗi. Tôi đã dành một vài giờ tự hỏi tại sao máy chủ 2008 của tôi đã hoạt động và máy chủ 2003 của tôi không hoạt động.

http://support.microsoft.com/kb/948963

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