app加载WebView时修改userAgent引起的问题
背景
邻小汇app最初版开发时,为了方便h5侧判断机型,app原生和h5项目这么约定的: app原生侧手动设置userAgent,iOS app为”com-ios”,安卓app为”com-android”。 在内部页面里,按这个关键字来判断没有问题。
问题
最近邻小汇h5有加载阿里云的h5的需求。阿里云的页面中有通过userAgent判断机型的处理,我们设置的userAgent内容格式不符合预期,引起了报错。
解决方案
iOS端将userAgent从
crm-ios
改为标准的userAgent基础上加上crm-ios 比如
Mozilla/5.0 (iPhone; CPU iPhone OS 15_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 crm-ios
其中第一个iPhone是机型值,15_7是系统版本号
H5端按照新的规则,是否包含crm-ios去判断是否app。这样,即使老版本app上传的仍旧是crm-ios,也能通过判断。
iOS端修改代码
- (void)configWebViewUA {
// 设置global User-Agent
NSString *additional = @"crm-ios";
NSString *userAgent = [NSString stringWithFormat:@"Mozilla/5.0 (%@; CPU iPhone OS %@ like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 %@", [[UIDevice currentDevice] model], [[[UIDevice currentDevice] systemVersion] stringByReplacingOccurrencesOfString:@"." withString:@"_"], additional];
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent":userAgent}];
[[NSUserDefaults standardUserDefaults] synchronize];
}
思考
以后有新的项目需要加载webview,不要简单地把userAgent改为很短的自定义内容,不然在加载第三方页面时可能会有问题。 可以在默认ua基础上加自己项目的识别内容。