激活
以下仅供参考,模块还在持续迭代和优化中
基本介绍
激活模块实现 License 授权与合法使用控制:
- 校验设备/用户是否已有有效订阅(Receipt/Subscription)。
- 按需将
offer_code 对应的 License 绑定到设备。
- 按授权类型(时长、区域、功能包)控制地图、算路、导航等能力;过期或异常时限制并提示续费。
前置条件:须先完成 用户账号 中的 UMS 初始化与登录,并在请求中携带有效 secure_token。建议在 主 SDK 初始化 之前完成激活校验或写入。
激活任务流程

| 阶段 |
说明 |
| CheckActivation |
getActivationStatus:有本地缓存则先返回缓存并 updateLocalActivationStatus;否则 checkActivationFromUserService(可调用 getActiveReceipts)。 |
| isActivated |
已激活 → ShowResult,不再请求激活。 |
| CheckNeedDoActivation |
未激活时由业务判断是否需激活(首装、换机、Offer 变更等)。 |
| DoActivation |
doActivationFromUserService → 对应 saveSubscription,成功后 ShowResult。 |
核心接口
通过 ReceiptAPIManager 或 UserService 调用:
| 接口 |
说明 |
getAvailableOffers(GetAvailableOffersRequest) |
查询当前账号/设备可用的 Offer 列表(可选,用于 UI 展示) |
getActiveReceipts(GetActiveReceiptsRequest) |
查询有效 Receipt/订阅,用于判断是否已激活 |
saveSubscription(SaveSubscriptionRequest) |
写入订阅,完成设备级激活 |
开发说明向导
步骤 1:查询可用 Offer(可选)
| GetAvailableOffersRequest offersRequest = new GetAvailableOffersRequest();
offersRequest.setApplicationId(applicationID);
offersRequest.setApplicationSignature(
ApplicationSignature.generateSignature(applicationID, applicationSecret));
offersRequest.setSecureToken(secureToken);
offersRequest.setDeviceInfo(deviceInfo);
offersRequest.setContext(serviceContext);
GetAvailableOffersResponse offersResponse =
getUserService().getAvailableOffers(offersRequest);
|
步骤 2:检查激活状态(CheckActivation)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | GetActiveReceiptsRequest receiptsRequest = new GetActiveReceiptsRequest();
receiptsRequest.setApplicationId(applicationID);
receiptsRequest.setApplicationSignature(
ApplicationSignature.generateSignature(applicationID, applicationSecret));
receiptsRequest.setSecureToken(secureToken);
receiptsRequest.setDeviceInfo(deviceInfo);
receiptsRequest.setContext(serviceContext);
GetActiveReceiptsResponse receiptsResponse =
getUserService().getActiveReceipts(receiptsRequest);
if (receiptsResponse.getStatus().getStatusCode() == 13200) {
String activeReceipts = receiptsResponse.getActiveReceipts();
// 解析 activeReceipts 判断是否有效、是否过期
}
|
实现本地缓存时:有缓存先返回 UI,再异步调用本接口刷新(与设计图一致)。
步骤 3:执行激活(DoActivation)
未激活且业务判定需要激活时:
1
2
3
4
5
6
7
8
9
10
11
12
13 | SaveSubscriptionRequest request = new SaveSubscriptionRequest();
request.setApplicationId(applicationID);
request.setApplicationSignature(
ApplicationSignature.generateSignature(applicationID, applicationSecret));
request.setSecureToken(secureToken);
request.setOfferCode("xxx_offer_navigation_5years"); // 项目约定 Offer
request.setUserId(userId);
request.setDeviceInfo(deviceInfo);
request.setServiceTarget(ServiceTarget.DEVICE_INFO); // 设备级绑定
request.setOfferStartUtcTimestamp(System.currentTimeMillis());
request.setContext(serviceContext);
SaveSubscriptionResponse response = getUserService().saveSubscription(request);
|
ServiceTarget 取值:
| 值 |
说明 |
DEVICE_INFO |
订阅绑定到设备(车机激活常用) |
USER_ID |
绑定到用户 |
BOTH |
同时绑定用户与设备 |
步骤 4:结果处理与 SDK 初始化
| 结果 |
建议处理 |
| 未激活 |
限制导航能力,引导完成步骤 3 |
statusCode == 13200 且 Receipt 有效 |
更新本地激活缓存,继续 主 SDK 初始化 |
statusCode == 13401 等鉴权失败 |
检查 secure_token,必要时回到 用户账号 重新登录或 refreshToken |
| Offer 激活失败 |
核对 offer_code 与运营配置,联系 Telenav 确认区域 API key |
关键参数
| 参数 |
描述 |
secure_token |
由 用户账号 登录后获取;本模块 API 必填。 |
offer_code |
唯一确定 License(时长、到期策略等);示例:xxx_offer_navigation_5years。 |
application_id |
API key,按区域/环境由 Telenav 发放。 |
application_signature |
请求签名。 |
device_uid |
DeviceInfo 中设置,全球唯一,与 License 绑定。 |
offer_start_utc_timestamp |
Offer 生效起始 UTC 毫秒时间戳。 |
service_target |
订阅绑定目标,车机场景推荐 DEVICE_INFO。 |
状态码说明
| statusCode |
含义 |
常见原因 |
13200 |
成功(UserServiceStatus.OK) |
— |
13401 |
鉴权失败 |
secure_token 缺失、过期或未 登录 |
13400 |
参数错误 |
输入参数不全或者格式有误 |
13500 |
内部服务出错 |
服务故障 |
13807 |
激活失败 |
Offer 有误或者已经失效 |
注意事项
- 先 login,再激活:
saveSubscription、getActiveReceipts 未带有效 secure_token 将失败。
offer_code 须与商务/运营在 UMS 侧配置一致;错误 Offer 可能导致激活成功但能力不匹配。
- 缓存与云端:首屏可读本地激活缓存,后台务必刷新云端 Receipt,避免过期仍显示已激活。
- 与主 SDK 排错分离:激活问题查
secure_token 与 Offer;SDK 初始化问题查 初始化。