2011-06-30 18 views
22

Chúc mừng,SKProductsRequest - cách xử lý lỗi hết thời gian chờ/kết nối?

Dường như với tôi, SKProductsRequest không xử lý hết thời gian chờ hoặc lỗi kết nối theo bất kỳ cách nào. Nó hoặc gọi -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response trên đại biểu của nó trong trường hợp thành công, hoặc nó không.

Tôi muốn giới thiệu cho người dùng của mình một loại chỉ báo hoạt động trong khi các sản phẩm đang được truy xuất hoặc có thể bật lên cảnh báo nếu không thể liên lạc với cửa hàng ứng dụng. Kể từ khi (trong trường hợp thất bại) không có phản hồi từ SKProductsRequest tuy nhiên, tôi tự hỏi mà sự kiện tôi nên tie trình bày của thông tin phản hồi đó - khác sau đó chờ đợi một số lượng tùy ý của thời gian.

Vì vậy, câu hỏi đặt ra là: Có một khoảng thời gian đã biết sau đó có an toàn để giả định yêu cầu không thành công không? Hoặc có cách nào để kiểm tra trạng thái của yêu cầu đang chờ xử lý mà tôi không thấy được không?

Trả lời

44

tôi chạy này trong dự án của tôi cho bất cứ khi nào một SKRequest thất bại (trong đó bao gồm SKProductRequest):

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error 
{ 
    alert = [[UIAlertView alloc] initWithTitle:@"In-App Store unavailable" message:@"The In-App Store is currently unavailable, please try again later." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 

    [alert show]; 
} 

Làm việc một điều trị. Tất nhiên bạn có thể đặt bất cứ thứ gì bên trong dấu ngoặc vuông để thay thế cảnh báo của tôi, nhưng điều này hoạt động tốt cho người dùng.

Hy vọng điều này sẽ được sử dụng cho bạn.

Lưu ý: Đây là số SKRequestDelegate không có trong SKProductsRequestDelegate, điều này hơi khó hiểu. SKRequestDelegate được sử dụng để mua và cho các yêu cầu sản phẩm. Người được ủy quyền đặt sử dụng request.delegate có thể triển khai các phương thức cho cả hai.

+1

!!!!!! Tôi không thể tin rằng tôi đã không nhìn thấy điều này ... Tôi đã kiểm tra giao thức SKProductDelegate như một trăm lần bởi vì tôi nghĩ rằng PHẢI là một trình xử lý lỗi ... Tôi đoán tôi chưa bao giờ bị mù trước đây. Tuyệt vời! Cảm ơn rất nhiều, anh chàng! – Toastor

+0

Tôi cũng hoàn toàn không nhận thấy điều này trong tài liệu .. – Brynjar

+0

nhưng phương pháp này không được ghi lại trong Tham chiếu giao thức SKProductsRequestDelegate? Ít nhất không có trong http://developer.apple.com/library/ios/#documentation/StoreKit/Reference/SKProductsRequestDelegate/Reference/Reference.html –

2

Tôi không tin rằng bạn có thể làm bất cứ điều gì ngoài việc chờ một khoảng thời gian tùy ý. Trong một số ứng dụng của tôi, tôi đợi 30 giây (trong khi hiển thị một chế độ xem hoạt động theo phương thức) và sau đó bảo lãnh với một cảnh báo lỗi chung. Vấn đề là, trong thực tế 30 giây là vượt quá sự chú ý của hầu hết người dùng đối với các vấn đề như vậy, nhưng nếu bạn làm cho nó đủ ngắn để có ích (nói 15 giây), bạn có thể thực sự bảo lãnh quá sớm.

Tôi không nghĩ rằng có một lựa chọn tốt hơn ... nhưng tôi sẵn lòng học cách khác!

+0

Roger, tôi xin lỗi vì đã chấp nhận cách xa bạn, nhưng Samuels trả lời thực sự là một cuộc gọi tốt. Hãy nhìn vào nó, tôi nghĩ rằng bạn sẽ ngạc nhiên như tôi, chủ yếu là bởi vì nó là như vậy rõ ràng ... Tôi ngạc nhiên như thế nào chúng tôi quản lý để bỏ qua này ... – Toastor

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