前言

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

在这里插入图片描述

本文将完整梳理 apple_product_name 库中 Mate 系列的设备映射表,涵盖 Mate 70Mate 60Mate X 折叠屏三大产品线,并结合实际代码演示如何在项目中进行 Mate 系列设备的识别与适配。

先给出结论式摘要:

  • Mate 系列共 24 个型号标识符:覆盖 Mate 70(8个)、Mate 60(8个)、Mate X(6个)三大产品线,外加 RS 非凡大师版
  • 同一产品多个型号:如 Mate 60 Pro 有 4 个变体(AL00/AL10/AL80/LX9),对应不同运营商和市场
  • GGK 前缀共用:Mate 60 Pro+ 和 Mate X5 共享 GGK 产品代号,需通过后缀区分

提示:本文所有映射数据来源于 apple_product_name 库的 HUAWEI_DEVICE_MAP,建议对照源码阅读。

目录

  1. Mate 70 系列映射表
  2. Mate 60 系列映射表
  3. Mate X 折叠屏系列映射表
  4. 型号命名规则解析
  5. 产品代号与后缀编码体系
  6. GGK 前缀共用问题
  7. Dart 侧查询 Mate 设备
  8. 批量 lookup 与系列筛选
  9. 折叠屏设备检测
  10. RS 非凡大师版识别
  11. 设备代际判断与能力矩阵
  12. Mate 系列完整映射汇总
  13. 映射表维护与新设备更新
  14. 常见问题与排查
  15. 总结

一、Mate 70 系列映射表

1.1 Mate 70 系列概览

Mate 70 系列是华为 2024 年发布的最新一代旗舰,包含标准版、Pro、Pro+ 和 RS 非凡大师版四个定位。

产品名称 产品代号 型号数量 定位
HUAWEI Mate 70 CFR 2 标准旗舰
HUAWEI Mate 70 Pro CFS 2 影像旗舰
HUAWEI Mate 70 Pro+ CFT 2 超大杯旗舰
HUAWEI Mate 70 RS 非凡大师 CFU 2 奢华定制

1.2 完整型号映射

// Mate 70 系列 — 2024年发布
"CFR-AN00": "HUAWEI Mate 70",
"CFR-AL00": "HUAWEI Mate 70",
"CFS-AN00": "HUAWEI Mate 70 Pro",
"CFS-AL00": "HUAWEI Mate 70 Pro",
"CFT-AN00": "HUAWEI Mate 70 Pro+",
"CFT-AL00": "HUAWEI Mate 70 Pro+",
"CFU-AN00": "HUAWEI Mate 70 RS 非凡大师",
"CFU-AL00": "HUAWEI Mate 70 RS 非凡大师",

Mate 70 系列的产品代号遵循 CF 前缀规律:CFR(标准版)→ CFS(Pro)→ CFT(Pro+)→ CFU(RS)。每款产品都有 AN00 和 AL00 两个变体,分别对应不同的网络制式版本。

1.3 Dart 侧验证

final ohos = OhosProductName();

// 查询 Mate 70 标准版
final mate70 = await ohos.lookup('CFR-AN00');
print(mate70); // HUAWEI Mate 70

// 查询 Mate 70 RS
final mate70rs = await ohos.lookup('CFU-AL00');
print(mate70rs); // HUAWEI Mate 70 RS 非凡大师

提示:Mate 70 系列的 CF 前缀是目前映射表中最新的产品代号,如果后续华为发布 Mate 80 系列,预计会采用新的前缀编码。

二、Mate 60 系列映射表

2.1 Mate 60 系列概览

Mate 60 系列是华为 2023 年发布的里程碑产品,标志着华为在自主芯片和 5G 通信技术上的回归。

产品名称 产品代号 型号数量 特点
HUAWEI Mate 60 BRA 1 标准旗舰
HUAWEI Mate 60 Pro ALN 4 变体最多
HUAWEI Mate 60 Pro+ GGK 2 与 Mate X5 共用前缀
HUAWEI Mate 60 RS 非凡大师 BTC 1 奢华定制

2.2 完整型号映射

// Mate 60 系列 — 2023年发布
"BRA-AL00": "HUAWEI Mate 60",
"ALN-AL00": "HUAWEI Mate 60 Pro",
"ALN-AL10": "HUAWEI Mate 60 Pro",
"ALN-AL80": "HUAWEI Mate 60 Pro",
"ALN-LX9":  "HUAWEI Mate 60 Pro",
"GGK-AL10": "HUAWEI Mate 60 Pro+",
"GGK-AL00": "HUAWEI Mate 60 Pro+",
"BTC-AL00": "HUAWEI Mate 60 RS 非凡大师",

2.3 Mate 60 Pro 的 4 个变体解析

Mate 60 Pro 是 Mate 系列中变体最多的产品,拥有 4 个不同的型号标识符:

型号 后缀含义 目标市场
ALN-AL00 全网通标准版 国内公开版
ALN-AL10 全网通变体 运营商定制版
ALN-AL80 全网通高配 特殊渠道版
ALN-LX9 国际版 海外市场

注意:开发者在做 Mate 60 Pro 的设备判断时,不能只匹配 ALN-AL00,必须覆盖全部 4 个变体,否则会漏掉部分用户。推荐使用 getProductName() 返回的友好名称做字符串匹配,而非直接比对 machineId。

三、Mate X 折叠屏系列映射表

3.1 Mate X 系列概览

Mate X 系列是华为在折叠屏领域的旗舰产品线,代表了华为在柔性屏幕和铰链工艺方面的最高水平。

产品名称 产品代号 型号数量 形态
HUAWEI Mate X5 GGK 2 内折大屏
HUAWEI Mate X3 PAL / ALT 2 内折大屏
HUAWEI Mate Xs 2 TET 2 外折大屏

3.2 完整型号映射

// Mate X 折叠屏系列
"GGK-W10":  "HUAWEI Mate X5",
"GGK-W00":  "HUAWEI Mate X5",
"PAL-AL00": "HUAWEI Mate X3",
"ALT-AL00": "HUAWEI Mate X3",
"TET-AN00": "HUAWEI Mate Xs 2",
"TET-AL00": "HUAWEI Mate Xs 2",

3.3 Mate X 系列的命名特点

折叠屏系列有几个值得注意的特征:

  1. W 后缀:Mate X5 的 GGK-W10 和 GGK-W00 中,W 通常表示 WiFi 版本或特定网络配置
  2. 双产品代号:Mate X3 同时拥有 PAL 和 ALT 两个产品代号,可能对应不同批次或配置
  3. Xs 与 X 的区别:Mate Xs 2(TET)采用外折方案,与 Mate X5/X3 的内折方案在形态上完全不同
// 判断折叠屏类型
final name = await OhosProductName().getProductName();
if (name.contains('Mate Xs')) {
  print('外折方案折叠屏');
} else if (name.contains('Mate X')) {
  print('内折方案折叠屏');
}

提示:折叠屏设备在 UI 适配上有特殊需求——展开态和折叠态的屏幕尺寸差异巨大,应用需要监听折叠状态变化并动态调整布局。

四、型号命名规则解析

4.1 型号标识符结构

华为设备的型号标识符由产品代号后缀编码两部分组成,中间用连字符 - 分隔:

ALN-AL00
 │    │
 │    └── 后缀编码(网络制式 + 版本号)
 └─────── 产品代号(唯一标识一款产品)

4.2 Mate 系列产品代号一览

产品代号 对应产品 发布年份
CFR Mate 70 2024
CFS Mate 70 Pro 2024
CFT Mate 70 Pro+ 2024
CFU Mate 70 RS 非凡大师 2024
BRA Mate 60 2023
ALN Mate 60 Pro 2023
GGK Mate 60 Pro+ / Mate X5 2023
BTC Mate 60 RS 非凡大师 2023
PAL Mate X3 2023
ALT Mate X3 2023
TET Mate Xs 2 2022

4.3 产品代号的规律

观察 Mate 70 系列可以发现一个有趣的规律——四款产品的代号前缀都是 CF,后面的字母按字母表递增:

  • CFR → Mate 70(标准版)
  • CFS → Mate 70 Pro
  • CFT → Mate 70 Pro+
  • CFU → Mate 70 RS

这种编码方式暗示了产品定位的递进关系,开发者可以据此推断未知型号的大致定位。

注意:产品代号的规律仅供参考,不同系列之间的编码规则可能不同。准确的设备识别应始终依赖映射表查询。

五、产品代号与后缀编码体系

5.1 后缀编码规则

后缀前缀 含义 示例
AL 全网通(国内) ALN-AL00, ALN-AL10
AN 全网通(另一编码) CFR-AN00, TET-AN00
LX 国际版 ALN-LX9
W WiFi / 特定网络 GGK-W10, GGK-W00

5.2 版本号含义

后缀中的数字部分也承载信息:

  • 00:标准版本(最常见)
  • 10:同产品的变体版本
  • 80:特殊版本或高配版本
  • 9(如 LX9):国际版本的版本号
// 同一产品的不同后缀示例
"ALN-AL00": "HUAWEI Mate 60 Pro",  // 标准版
"ALN-AL10": "HUAWEI Mate 60 Pro",  // 变体版
"ALN-AL80": "HUAWEI Mate 60 Pro",  // 特殊版
"ALN-LX9":  "HUAWEI Mate 60 Pro",  // 国际版

5.3 为什么同一产品有多个型号

华为为同一产品分配多个型号标识符,主要出于以下原因:

  1. 运营商定制:不同运营商(移动/联通/电信)可能要求不同的网络频段配置
  2. 市场区域:国内版和国际版在软件预装、网络制式上有差异
  3. 销售渠道:公开版、运营商合约版、电商专供版可能有不同型号
  4. 硬件配置:同一产品的不同内存/存储组合可能对应不同型号

提示:这就是为什么 apple_product_name 库的映射表中,一个产品名称会对应多个 machineId。开发者在做设备统计时,应该按产品名称聚合,而非按 machineId 聚合。

六、GGK 前缀共用问题

6.1 问题描述

GGK 是映射表中一个特殊的产品代号——它同时被 Mate 60 Pro+Mate X5 两款完全不同的产品使用:

// GGK 前缀的所有型号
"GGK-AL10": "HUAWEI Mate 60 Pro+",   // 直板旗舰
"GGK-AL00": "HUAWEI Mate 60 Pro+",   // 直板旗舰
"GGK-W10":  "HUAWEI Mate X5",        // 折叠屏
"GGK-W00":  "HUAWEI Mate X5",        // 折叠屏

6.2 区分规则

区分这两款产品的关键在于后缀

后缀 产品 形态
AL(AL00, AL10) Mate 60 Pro+ 直板手机
W(W00, W10) Mate X5 折叠屏

6.3 代码中的正确处理

Future<String> identifyGGKDevice(String machineId) async {
  if (!machineId.startsWith('GGK')) {
    return await OhosProductName().lookup(machineId);
  }

  // GGK 前缀需要特别处理
  final name = await OhosProductName().lookup(machineId);
  print('GGK 设备识别: $machineId$name');

  // 映射表已经处理了区分逻辑,直接使用即可
  // GGK-AL* → Mate 60 Pro+
  // GGK-W*  → Mate X5
  return name;
}

实际上 apple_product_name 的映射表已经正确处理了 GGK 前缀的区分——每个完整的型号标识符都有唯一的映射。开发者只需要使用 lookup() 传入完整型号即可,不需要自己实现前缀判断逻辑

注意:如果你只拿到了 GGK 前缀而没有完整型号,是无法确定具体产品的。确保上游数据源提供的是完整的型号标识符(如 GGK-AL10),而非截断的前缀。

七、Dart 侧查询 Mate 设备

7.1 获取当前设备信息

Future<void> checkCurrentDevice() async {
  final ohos = OhosProductName();
  final machineId = await ohos.getMachineId();
  final productName = await ohos.getProductName();

  print('型号标识: $machineId');
  print('产品名称: $productName');

  if (productName.contains('Mate')) {
    print('当前设备属于 Mate 系列');
  }
}

7.2 判断具体子系列

enum MateSubSeries { mate70, mate60, mateX, unknown }

MateSubSeries classifyMateDevice(String productName) {
  if (productName.contains('Mate 70')) return MateSubSeries.mate70;
  if (productName.contains('Mate 60')) return MateSubSeries.mate60;
  if (productName.contains('Mate X') || productName.contains('Mate Xs')) {
    return MateSubSeries.mateX;
  }
  return MateSubSeries.unknown;
}

7.3 使用 lookup 查询指定型号

Future<void> lookupMateDevices() async {
  final ohos = OhosProductName();

  // 查询不同系列的代表型号
  final devices = {
    'CFR-AN00': await ohos.lookup('CFR-AN00'),
    'ALN-AL00': await ohos.lookup('ALN-AL00'),
    'GGK-W10': await ohos.lookup('GGK-W10'),
  };

  devices.forEach((id, name) {
    print('$id$name');
  });
}

提示:lookup() 方法在映射表未命中时返回原始 machineId,lookupOrNull() 则返回 null。根据业务需求选择合适的方法。详见 apple_product_name API

八、批量 lookup 与系列筛选

8.1 批量查询

Future<Map<String, String>> batchLookup(List<String> machineIds) async {
  final ohos = OhosProductName();
  final results = <String, String>{};

  for (final id in machineIds) {
    results[id] = await ohos.lookup(id);
  }

  return results;
}

// 使用示例
final allMateIds = [
  'CFR-AN00', 'CFR-AL00', 'CFS-AN00', 'CFS-AL00',
  'CFT-AN00', 'CFT-AL00', 'CFU-AN00', 'CFU-AL00',
  'BRA-AL00', 'ALN-AL00', 'ALN-AL10', 'ALN-AL80',
];
final results = await batchLookup(allMateIds);

8.2 按系列筛选统计

Future<Map<String, int>> countBySeries(List<String> machineIds) async {
  final ohos = OhosProductName();
  final counts = <String, int>{
    'Mate 70': 0,
    'Mate 60': 0,
    'Mate X': 0,
  };

  for (final id in machineIds) {
    final name = await ohos.lookup(id);
    if (name.contains('Mate 70')) {
      counts['Mate 70'] = counts['Mate 70']! + 1;
    } else if (name.contains('Mate 60')) {
      counts['Mate 60'] = counts['Mate 60']! + 1;
    } else if (name.contains('Mate X')) {
      counts['Mate X'] = counts['Mate X']! + 1;
    }
  }

  return counts;
}

注意:批量查询时每次 lookup 都会触发一次 MethodChannel 通信。如果数据量大,建议在原生侧实现批量查询接口,减少跨平台通信次数。

九、折叠屏设备检测

9.1 检测是否为折叠屏

Future<bool> isFoldableDevice() async {
  final name = await OhosProductName().getProductName();
  return name.contains('Mate X') || name.contains('Mate Xs');
}

Mate X 系列(Mate X5、Mate X3、Mate Xs 2)都是折叠屏设备。通过产品名称中的 Mate X 关键词即可判断。

9.2 折叠屏适配建议

检测到折叠屏设备后,应用可以启用以下适配策略:

  • 分栏布局:展开态使用左右分栏,充分利用大屏空间
  • 折叠状态监听:监听折叠/展开事件,动态切换布局
  • 触控热区优化:折叠态和展开态的握持姿势不同,交互区域需要调整
  • 内容连续性:折叠/展开切换时,用户正在查看的内容不能丢失
Future<void> adaptLayout() async {
  if (await isFoldableDevice()) {
    // 启用折叠屏专属布局
    print('折叠屏设备,启用大屏适配');
  }
}

9.3 内折 vs 外折的区分

Future<String> getFoldType() async {
  final name = await OhosProductName().getProductName();
  if (name.contains('Mate Xs')) return '外折';
  if (name.contains('Mate X')) return '内折';
  return '非折叠屏';
}
折叠方案 代表产品 展开尺寸 特点
内折 Mate X5, Mate X3 7.85 英寸+ 主流方案,屏幕受保护
外折 Mate Xs 2 7.8 英寸 折叠态也能使用大屏

提示:折叠屏适配是一个独立的技术领域,涉及 WindowManager、Display API 等系统级接口。apple_product_name 负责设备识别,具体的折叠屏适配逻辑需要结合 OpenHarmony 的窗口管理 API 实现。

十、RS 非凡大师版识别

10.1 RS 版本在映射表中的位置

// Mate 70 RS
"CFU-AN00": "HUAWEI Mate 70 RS 非凡大师",
"CFU-AL00": "HUAWEI Mate 70 RS 非凡大师",

// Mate 60 RS
"BTC-AL00": "HUAWEI Mate 60 RS 非凡大师",

RS 非凡大师版是 Mate 系列中定位最高端的版本,Mate 70 RS 有 2 个型号,Mate 60 RS 有 1 个型号。

10.2 检测 RS 版本

Future<bool> isRSEdition() async {
  final name = await OhosProductName().getProductName();
  return name.contains('RS') || name.contains('非凡大师');
}

代码同时匹配了 RS非凡大师 两个关键词,因为在不同语言环境下产品名称的显示格式可能不同。

10.3 RS 版本的差异化策略

RS 非凡大师版的用户通常是高端商务人群,应用可以考虑:

  1. 提供定制化的 UI 主题(更精致的视觉风格)
  2. 开放高级功能入口(VIP 专属功能)
  3. 优先级更高的客服通道
  4. 独家内容资源

注意:差异化功能应该是锦上添花,不能让非 RS 用户感觉被区别对待。基础功能必须对所有设备一致。

十一、设备代际判断与能力矩阵

11.1 代际判断

int? getMateGeneration(String productName) {
  if (productName.contains('Mate 70')) return 70;
  if (productName.contains('Mate 60')) return 60;
  if (productName.contains('Mate X5')) return 5;
  if (productName.contains('Mate X3')) return 3;
  if (productName.contains('Mate Xs 2')) return 2;
  return null;
}

11.2 Mate 系列能力矩阵

能力维度 Mate 70 Mate 60 Mate X5 Mate X3 Mate Xs 2
最新芯片
折叠屏
卫星通信
RS 版本

11.3 基于能力矩阵的功能开关

Future<Map<String, bool>> getDeviceCapabilities() async {
  final name = await OhosProductName().getProductName();

  return {
    'isFoldable': name.contains('Mate X') || name.contains('Mate Xs'),
    'isLatestGen': name.contains('Mate 70'),
    'isRS': name.contains('RS'),
    'isProPlus': name.contains('Pro+'),
    'hasSatellite': name.contains('Mate 70') || name.contains('Mate 60'),
  };
}

将设备能力抽象为布尔值映射表,业务层可以方便地根据能力组合决定功能的启用与禁用,实现了设备检测逻辑与业务逻辑的解耦。

十二、Mate 系列完整映射汇总

12.1 全量映射表

// ========== Mate 系列完整映射表 ==========

// Mate 70 系列(8个型号)
"CFR-AN00": "HUAWEI Mate 70",
"CFR-AL00": "HUAWEI Mate 70",
"CFS-AN00": "HUAWEI Mate 70 Pro",
"CFS-AL00": "HUAWEI Mate 70 Pro",
"CFT-AN00": "HUAWEI Mate 70 Pro+",
"CFT-AL00": "HUAWEI Mate 70 Pro+",
"CFU-AN00": "HUAWEI Mate 70 RS 非凡大师",
"CFU-AL00": "HUAWEI Mate 70 RS 非凡大师",

// Mate 60 系列(8个型号)
"BRA-AL00": "HUAWEI Mate 60",
"ALN-AL00": "HUAWEI Mate 60 Pro",
"ALN-AL10": "HUAWEI Mate 60 Pro",
"ALN-AL80": "HUAWEI Mate 60 Pro",
"ALN-LX9":  "HUAWEI Mate 60 Pro",
"GGK-AL10": "HUAWEI Mate 60 Pro+",
"GGK-AL00": "HUAWEI Mate 60 Pro+",
"BTC-AL00": "HUAWEI Mate 60 RS 非凡大师",

// Mate X 折叠屏系列(6个型号)
"GGK-W10":  "HUAWEI Mate X5",
"GGK-W00":  "HUAWEI Mate X5",
"PAL-AL00": "HUAWEI Mate X3",
"ALT-AL00": "HUAWEI Mate X3",
"TET-AN00": "HUAWEI Mate Xs 2",
"TET-AL00": "HUAWEI Mate Xs 2",

12.2 统计汇总

系列 产品数 型号数 占映射表比例
Mate 70 4 8 约 7%
Mate 60 4 8 约 7%
Mate X 3 6 约 5%
Mate 合计 11 22 约 19%

Mate 系列共 11 款产品、22 个型号标识符,占整个 HUAWEI_DEVICE_MAP 映射表约 19% 的条目。这反映了 Mate 系列作为华为核心旗舰产品线的重要地位。

十三、映射表维护与新设备更新

13.1 更新流程

当华为发布新的 Mate 系列产品时,映射表需要及时更新:

  1. 获取新设备的型号标识符(通过华为官方文档或真机读取 deviceInfo.productModel
  2. HUAWEI_DEVICE_MAP 中添加新条目
  3. 提交 Pull Request 到 apple_product_name 仓库
  4. 发布新版本

13.2 如何获取新设备的型号标识符

// 在新设备上运行以下代码获取型号
final machineId = await OhosProductName().getMachineId();
print('新设备型号: $machineId');
// 将输出的型号标识符提交到映射表

13.3 版本管理建议

  • 映射表更新应遵循语义化版本:新增设备 → minor 版本号递增
  • 每次更新记录 changelog,注明新增了哪些设备
  • 确保向后兼容——只增不删,已有映射不修改

提示:欢迎社区开发者通过 GitCode 提交 Pull Request 贡献新设备映射,共同维护一个完整准确的设备数据库。

十四、常见问题与排查

14.1 FAQ

问题 原因 解决方案
lookup 返回原始 machineId 映射表中没有该型号 检查是否为新设备,提交 PR 补充
同一前缀返回不同产品 GGK 前缀共用 使用完整型号标识符查询
getProductName 返回 Unknown 非华为设备或插件未注册 检查设备品牌和插件配置
国际版型号查不到 LX 后缀未收录 补充国际版型号到映射表

14.2 调试技巧

Future<void> debugMateDevice() async {
  final ohos = OhosProductName();

  // 1. 先获取原始型号
  final machineId = await ohos.getMachineId();
  print('原始型号: $machineId');

  // 2. 查映射表
  final productName = await ohos.lookup(machineId);
  print('映射结果: $productName');

  // 3. 对比 getProductName
  final directName = await ohos.getProductName();
  print('直接获取: $directName');

  // 4. 检查是否命中
  final orNull = await ohos.lookupOrNull(machineId);
  print('是否命中映射表: ${orNull != null}');
}

14.3 映射表未命中的降级策略

当遇到映射表中没有的新型号时,apple_product_name 的降级逻辑是:

  1. lookup(machineId) → 返回原始 machineId(如 "CFR-AN00"
  2. lookupOrNull(machineId) → 返回 null
  3. getProductName() → 尝试读取系统 marketName,如果也为空则返回 productModel

注意:降级策略保证了即使映射表不完整,应用也不会崩溃。但降级后的显示效果不够友好(用户看到的是型号标识符而非产品名称),所以及时更新映射表仍然很重要。

总结

华为 Mate 系列在 apple_product_name 映射表中共有 22 个型号标识符,覆盖 Mate 70、Mate 60、Mate X 三大产品线。核心要点:同一产品可能有多个型号变体(如 Mate 60 Pro 的 4 个变体)、GGK 前缀被 Mate 60 Pro+ 和 Mate X5 共用需通过后缀区分、RS 非凡大师版可用于高端用户差异化策略。开发者应使用 getProductName() 返回的友好名称做系列判断,而非直接比对 machineId。

下一篇文章将介绍华为 Pura 系列设备映射表,敬请期待。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐