如何判断请求来源是什么类型的设备呢?
使用场景:
我需要根据不同的请求来源返回不同的数据,比如说苹果手机我要返回跳转到appStore的链接,如果是其他的,我要返回直接下载apk的链接。
添加依赖
<!--判断请求来源-->
<dependency>
<groupId>org.springframework.mobile</groupId>
<artifactId>spring-mobile-device</artifactId>
<version>1.1.5.RELEASE</version>
</dependency>
添加拦截器
@Configuration
public class MobileWebMvcConfigure implements WebMvcConfigurer {
@Bean
public DeviceResolverHandlerInterceptor
deviceResolverHandlerInterceptor() {
return new DeviceResolverHandlerInterceptor();
}
@Bean
public DeviceHandlerMethodArgumentResolver
deviceHandlerMethodArgumentResolver() {
return new DeviceHandlerMethodArgumentResolver();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(deviceResolverHandlerInterceptor());
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(deviceHandlerMethodArgumentResolver());
}
}
控制器使用
/**
* 页面控制器,根据不同的来源返回不同的页面
*/
@Controller
public class PageController {
@Autowired
private MessageSource messageSource;
//https://app.cool-wearable.com/package/download/fitfly
@GetMapping("/download/{name}")
public String appPage(@PathVariable("name") String appName,
Device device,
Model model) {
String targetLink = "";
String logoPath = "https://ic-wear-public-1303691912.cos.ap-hongkong.myqcloud.com/app/icon/2022_4_21/1506611964625125378.jpg";
String appLabel = "FitFly";
String appVersion = "v1.0.19";
String iOS;
//去查询数据,根据app名去查询跳转链接
if (device != null && device.getDevicePlatform() == DevicePlatform.IOS) {
//返回苹果下载app的页面
//targetLink = "itms-apps://itunes.apple.com/app/id1505971648";
targetLink = "https://apps.apple.com/cn/app/id1505971648";
iOS = "1";
} else {
iOS = "0";
//返回android app下载的页面
targetLink = "https://ic-wear-public-1303691912.cos.ap-hongkong.myqcloud.com/app/apk/2022_4_21/Fitfly_v1.0.19.apk";
}
model.addAttribute("targetLink", targetLink);
model.addAttribute("logoPath", logoPath);
model.addAttribute("appLabel", appLabel);
model.addAttribute("appVersion", appVersion);
model.addAttribute("iOS", iOS);
return "app_page_v1";
}
}
可以看出DevicePlatform里有IOS这个值,其实是个枚举。
这样子呢就可以判断来源啦!当然还可以判断是不是平板电脑之类的。device.isMobile()
来判断是不是手机。
另外附加上js判断当前留恋器是不是safai留恋器的代码.
var iosTips = document.getElementById('ios-tips-part');
var isSafari = (ua.indexOf('applewebkit') > -1 && ua.indexOf('mobile') > -1 && ua.indexOf('safari') > -1 &&
ua.indexOf('linux') === -1 && ua.indexOf('android') === -1 && ua.indexOf('chrome') === -1 &&
ua.indexOf('ios') === -1 && ua.indexOf('browser') === -1);
console.log('isSafari==> '+ isSafari);
if (isIOS=='1'&& !isSafari) {
//提示可见
iosTips.style.display = 'block'
}else{
//不可见
iosTips.style.display = 'none'
}