io.github.apkcloud.devicedetector.parser.client.MobileApp Maven / Gradle / Ivy
Show all versions of DeviceDetector Show documentation
package io.github.apkcloud.devicedetector.parser.client;
import io.github.apkcloud.devicedetector.ClientHints;
import io.github.apkcloud.devicedetector.parser.client.hints.AppHints;
import java.util.Map;
import java.util.Objects;
/**
* 用于检测移动应用程序的客户端解析器
*/
public class MobileApp extends AbstractClientParser {
private AppHints appHints;
protected String fixtureFile = "regexes/client/mobile_apps.yml";
protected String parserName = "mobile app";
public MobileApp() {
super();
this.appHints = new AppHints();
}
public MobileApp(String ua) {
super(ua);
this.appHints = new AppHints(ua);
}
public MobileApp(String ua, ClientHints clientHints) {
super(ua, clientHints);
this.appHints = new AppHints(ua, clientHints);
}
/**
* 设置 ClientHints
*/
public void setClientHints(ClientHints clientHints) {
super.setClientHints(clientHints);
this.appHints.setClientHints(clientHints);
}
/**
* 设置要解析的 UserAgent
*/
public void setUserAgent(String ua) {
super.setUserAgent(ua);;
this.appHints.setUserAgent(ua);
}
@Override
public String getName() {
return parserName;
}
/**
* 解析当前的 UA 并检查是否包含任何客户端信息
* 更多细节参见 {@link AbstractClientParser#parse()}
*
* @return {@code Map | null}
*/
public Map parse() throws Exception {
Map result = parse(fixtureFile, parserName);
String name = null, version = null;
if (result != null) {
name = result.getOrDefault("name", "");
version = result.getOrDefault("version", "");
}
Map appHash = appHints.parse();
if (appHash != null && !Objects.equals(appHash.get("name"), name)) {
name = appHash.getOrDefault("name", "");
version = "";
}
if (isNullOrEmpty(name)) {
return null;
}
return Map.of("type", parserName, "name", name, "version", version);
}
}