Map scheme types to user-friendly platform names. */ private static array $names = [ self::SCHEME_HTTP => 'Web', self::SCHEME_HTTPS => 'Web', self::SCHEME_IOS => 'iOS', self::SCHEME_MACOS => 'macOS', self::SCHEME_WATCHOS => 'watchOS', self::SCHEME_TVOS => 'tvOS', self::SCHEME_ANDROID => 'Android', self::SCHEME_WINDOWS => 'Windows', self::SCHEME_LINUX => 'Linux', self::SCHEME_CHROME_EXTENSION => 'Web (Chrome Extension)', self::SCHEME_FIREFOX_EXTENSION => 'Web (Firefox Extension)', self::SCHEME_SAFARI_EXTENSION => 'Web (Safari Extension)', self::SCHEME_EDGE_EXTENSION => 'Web (Edge Extension)', ]; /** * Get user-friendly platform name from a scheme. * * @param string|null $scheme * @return string Empty string if scheme is not found. */ public static function getNameByScheme(?string $scheme): string { return self::$names[$scheme] ?? ''; } public static function getHostnames(array $platforms): array { $hostnames = []; foreach ($platforms as $platform) { $type = strtolower($platform['type'] ?? self::TYPE_UNKNOWN); $hostname = strtolower($platform['hostname'] ?? ''); $key = strtolower($platform['key'] ?? ''); switch ($type) { case self::TYPE_WEB: case self::TYPE_FLUTTER_WEB: if (!empty($hostname)) { $hostnames[] = $hostname; } break; case self::TYPE_FLUTTER_IOS: case self::TYPE_FLUTTER_ANDROID: case self::TYPE_FLUTTER_MACOS: case self::TYPE_FLUTTER_WINDOWS: case self::TYPE_FLUTTER_LINUX: case self::TYPE_ANDROID: case self::TYPE_APPLE_IOS: case self::TYPE_APPLE_MACOS: case self::TYPE_APPLE_WATCHOS: case self::TYPE_APPLE_TVOS: case self::TYPE_REACT_NATIVE_IOS: case self::TYPE_REACT_NATIVE_ANDROID: case self::TYPE_UNITY: if (!empty($key)) { $hostnames[] = $key; } break; default: break; } } return array_unique($hostnames); } public static function getSchemes(array $platforms): array { $schemes = []; foreach ($platforms as $platform) { $type = strtolower($platform['type'] ?? self::TYPE_UNKNOWN); $scheme = strtolower($platform['key'] ?? ''); switch ($type) { case self::TYPE_SCHEME: if (!empty($scheme) && preg_match('/^[a-z][a-z0-9+.-]*$/', $scheme)) { $schemes[] = $scheme; } break; case self::TYPE_WEB: case self::TYPE_FLUTTER_WEB: $schemes[] = self::SCHEME_HTTP; $schemes[] = self::SCHEME_HTTPS; break; case self::TYPE_FLUTTER_IOS: case self::TYPE_APPLE_IOS: case self::TYPE_REACT_NATIVE_IOS: $schemes[] = self::SCHEME_IOS; break; case self::TYPE_FLUTTER_ANDROID: case self::TYPE_ANDROID: case self::TYPE_REACT_NATIVE_ANDROID: $schemes[] = self::SCHEME_ANDROID; break; case self::TYPE_FLUTTER_MACOS: case self::TYPE_APPLE_MACOS: $schemes[] = self::SCHEME_MACOS; break; case self::TYPE_FLUTTER_WINDOWS: case self::TYPE_UNITY: $schemes[] = self::SCHEME_WINDOWS; break; case self::TYPE_FLUTTER_LINUX: $schemes[] = self::SCHEME_LINUX; break; case self::TYPE_APPLE_WATCHOS: $schemes[] = self::SCHEME_WATCHOS; break; case self::TYPE_APPLE_TVOS: $schemes[] = self::SCHEME_TVOS; break; default: break; } } return array_unique($schemes); } }