我们的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")
你知道为什么苹果测试应用程序时这不起作用,而我们做的时候完全可以吗?
祝你好运
答案 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 DEBUG
或NSAssert()
之类的内容,则可能会发生这种情况。
如果这还不够,请发布其他代码。
答案 3 :(得分:0)
if var userAgent = self.manager.requestSerializer.value(forHTTPHeaderField: "User-Agent") {
userAgent = userAgent.stringByAppendingPathComponent(path: "CUSTOM_PART")
self.manager.requestSerializer.setValue(userAgent, forHTTPHeaderField: "User-Agent")
}