2015-04-06 2 views
6

наше приложение iOS недавно отклонено Apple, потому что оно не смогло установить действительное соединение с нашим сервером api. Мы используем специально отформатированный пользовательский агент для регистрации токена устройства и так далее. Если пользовательский агент не входит в нашу оболочку, api блокирует запрос.Настройка User-Agent в AFNetworking

Все это очень хорошо тестировало приложение на тренажере, а также на реальном устройстве. Пользовательский агент был настроен правильно и работали на api.

Как Apple проверила приложение, они отклонили его, потому что приложение не удалось подключиться к api. Когда мы проверили серверные лог-файлы, мы заметили, что каждый запрос, отправленный тестерами Apple, имел совершенно другой пользовательский агент, чем тот, который мы установили в коде.

The (правильный) агент пользователя, который был установлен, как мы тестировали приложение:

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

В (неправильный) агент пользователя, так как он появился в наших журналах:

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

приложение использует AFNetworking и устанавливает свой пользовательский агент следующим образом:

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

У вас есть идеи, почему это не работает, поскольку Apple тестирует приложение, в то время как оно полностью в порядке, когда мы делаем?

С наилучшими пожеланиями

ответ

2

агента пользователя, который появляется в журналах по умолчанию агента пользователя AFNetworking в. Это означает, что ваш код, который устанавливает заголовок, не вызывался.

Возможно, ваш код скомпилирован в сборке релизов? Это может произойти, если у вас есть что-то вроде #ifdef DEBUG или NSAssert() в связанном логическом пути.

Если этого недостаточно, напишите дополнительный код.

+0

Функция setValue вызывается непосредственно после инициализации Framework. Это должно быть в сборке релизов, потому что иначе вообще не было бы никакого запроса. Так что нет возможности, что функция 'setValue' не компилируется. Думаю, –

+0

Трудно сказать, тогда, без дополнительного контекста. –

+0

Какие части кода помогут продолжить исследование проблемы? –

6

Я попытался изменить свой агент пользователя с кодом ниже

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

, но не имеет никакого эффекта, пока не переименовывать @"user-agent" к @"User-Agent"

4

Пытаться делать дальше:

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

это сэкономит, сгенерированные данными AFNetworking, и как lo добавьте его с вашей стороны

Смежные вопросы