在AFNetworking中设置User-Agent

时间:2015-04-06 18:29:27

标签: ios swift afnetworking afnetworking-2

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

在模拟器和真实设备上测试应用程序都很有效。用户代理设置正确,api调用有效。

Apple测试了应用程序时,他们拒绝了该应用程序,因为该应用程序无法连接到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")

你知道为什么苹果测试应用程序时这不起作用,而我们做的时候完全可以吗?

祝你好运

4 个答案:

答案 0 :(得分:6)

我尝试使用以下代码

更改用户代理

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

但在将@"user-agent"重命名为@"User-Agent"

之前无效

答案 1 :(得分:5)

尝试下一步:

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

这将保存由AFNetworking数据生成的数据,并由您的部分附加

答案 2 :(得分:2)

日志中显示的用户代理是AFNetworking的默认用户代理。这意味着未调用设置标头的代码。

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

如果这还不够,请发布其他代码。

答案 3 :(得分:0)

Swift 4 + 语法

中的

gbk's solution

if var userAgent = self.manager.requestSerializer.value(forHTTPHeaderField: "User-Agent") {
        userAgent = userAgent.stringByAppendingPathComponent(path: "CUSTOM_PART")
        self.manager.requestSerializer.setValue(userAgent, forHTTPHeaderField: "User-Agent")
    }