2015-04-06 58 views
6

我们的iOS应用最近被Apple拒绝,因为它无法建立到我们的服务器api的有效连接。我们使用特殊格式的用户代理来注册设备令牌等。如果用户代理不适合我们的时间表,API会阻止请求。在AFNetworking中设置用户代理

这一切都很好地测试模拟器上的应用程序以及在真实的设备上。用户代理设置正确,并且api调用工作正常。

随着苹果测试应用程序,他们拒绝了它,因为该应用程序无法连接到api。当我们检查服务器日志文件时,我们注意到,Apple测试人员发出的每个请求都有一个完全不同的用户代理,而不是我们在代码中设置的代理。

(正确的)用户代理,因为我们测试的应用程序,设置:

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")

你知道为什么这不起作用,因为苹果测试应用程序,而它完全没问题,当我们这样做?

问候

回答

2

出现在你的日志中的用户代理是AFNetworking的默认用户代理。这意味着您设置标题的代码未被调用。

也许你的代码被编译出来发布版本?如果在相关逻辑路径中有类似#ifdef DEBUGNSAssert()的情况,则可能会发生这种情况。

如果没有足够的信息,请张贴额外的代码。

+0

setValue函数在初始化框架后直接调用。这必须在发布版本中,否则根本没有任何请求。 所以没有'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在你的部分追加