2015-04-06 19 views
6

ứng dụng iOS của chúng tôi gần đây đã bị Apple từ chối vì không thể thiết lập kết nối hợp lệ với api máy chủ của chúng tôi. Chúng tôi đang sử dụng một tác nhân người dùng được định dạng đặc biệt để đăng ký mã thông báo thiết bị và vân vân. Nếu tác nhân người dùng không phù hợp với sheme của chúng tôi, thì api sẽ chặn yêu cầu.Đặt tác nhân người dùng trong AFNetworking

Tất cả hoạt động khá tốt khi thử nghiệm ứng dụng trên trình mô phỏng cũng như trên thiết bị thực. Tác nhân người dùng được đặt chính xác và cuộc gọi api đã hoạt động.

Khi Apple kiểm tra ứng dụng, họ đã từ chối ứng dụng vì ứng dụng không thể kết nối với api. Khi chúng tôi kiểm tra nhật ký máy chủ, chúng tôi nhận thấy rằng mọi yêu cầu được gửi bởi người kiểm tra của Apple đều có một tác nhân người dùng hoàn toàn khác, so với yêu cầu mà chúng tôi đã đặt trong mã.

The (đúng) user-agent, đã được thiết lập như chúng tôi đã thử nghiệm ứng dụng:

AppName-App/010002 iOS/8.1.2 on Apple iPhone/DeviceToken

The (không chính xác) user-agent, vì nó xuất hiện trong nhật ký của mình:

AppName/1.0.0.2 (iPad; iOS 8.1.3; Scale/2.00)

Ứng dụng sử dụng AFNetworking và đặt tác nhân người dùng của nó như sau:

ConnectionManager.requestSerializer.setValue(IOSREQUESTHEADER, forHTTPHeaderField: "user-agent")

Bạn có biết tại sao điều này không hoạt động khi Apple kiểm tra ứng dụng, trong khi nó hoàn toàn ổn khi chúng ta làm?

Trân trọng

Trả lời

2

Tác nhân người dùng xuất hiện trong nhật ký của bạn là tác nhân người dùng mặc định của AFNetworking. Điều này có nghĩa là mã của bạn đặt tiêu đề không được gọi.

Có lẽ mã của bạn được biên soạn trong bản dựng bản phát hành? Điều này có thể xảy ra nếu bạn có một số thứ như #ifdef DEBUG hoặc NSAssert() trong đường dẫn logic có liên quan.

Nếu không đủ thông tin, vui lòng đăng mã bổ sung.

+0

Chức năng 'setValue' được gọi trực tiếp sau khi khởi tạo Khung. Điều này phải có trong bản phát hành vì nếu không thì sẽ không có bất kỳ yêu cầu nào. Vì vậy, không có khả năng nào của hàm 'setValue' không được biên dịch tôi nghĩ rằng –

+0

Khó nói, sau đó, không có ngữ cảnh nhiều hơn. –

+0

Những phần nào của mã sẽ giúp điều tra thêm vấn đề? –

6

Tôi cố gắng để thay đổi người sử dụng tôi đại lý với mã dưới đây

[self.requestSerializer setValue:@"VAL" forHTTPHeaderField:@"user-agent"];

nhưng không có tác dụng cho đến khi đổi tên @"user-agent"-@"User-Agent"

4

Cố gắng làm gì tiếp theo:

NSString *userAgent = [self.manager.requestSerializer valueForHTTPHeaderField:@"User-Agent"]; 
userAgent = [userAgent stringByAppendingPathComponent:@"CUSTOM_PART"]; 
[self.manager.requestSerializer setValue:userAgent forHTTPHeaderField:@"User-Agent"]; 

điều này sẽ tiết kiệm được tạo ra bởi dữ liệu mạng và dữ liệu lo nối thêm vào phần của bạn

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