Skip to content

激活

以下仅供参考,模块还在持续迭代和优化中

基本介绍

激活模块实现 License 授权与合法使用控制

  • 校验设备/用户是否已有有效订阅(Receipt/Subscription)。
  • 按需将 offer_code 对应的 License 绑定到设备。
  • 按授权类型(时长、区域、功能包)控制地图、算路、导航等能力;过期或异常时限制并提示续费。

前置条件:须先完成 用户账号 中的 UMS 初始化与登录,并在请求中携带有效 secure_token。建议在 主 SDK 初始化 之前完成激活校验或写入。

激活任务流程

激活任务流程

阶段 说明
CheckActivation getActivationStatus:有本地缓存则先返回缓存并 updateLocalActivationStatus;否则 checkActivationFromUserService(可调用 getActiveReceipts)。
isActivated 已激活 → ShowResult,不再请求激活。
CheckNeedDoActivation 未激活时由业务判断是否需激活(首装、换机、Offer 变更等)。
DoActivation doActivationFromUserService → 对应 saveSubscription,成功后 ShowResult

核心接口

通过 ReceiptAPIManagerUserService 调用:

接口 说明
getAvailableOffers(GetAvailableOffersRequest) 查询当前账号/设备可用的 Offer 列表(可选,用于 UI 展示)
getActiveReceipts(GetActiveReceiptsRequest) 查询有效 Receipt/订阅,用于判断是否已激活
saveSubscription(SaveSubscriptionRequest) 写入订阅,完成设备级激活

开发说明向导

步骤 1:查询可用 Offer(可选)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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,再激活saveSubscriptiongetActiveReceipts 未带有效 secure_token 将失败。
  • offer_code 须与商务/运营在 UMS 侧配置一致;错误 Offer 可能导致激活成功但能力不匹配。
  • 缓存与云端:首屏可读本地激活缓存,后台务必刷新云端 Receipt,避免过期仍显示已激活。
  • 与主 SDK 排错分离:激活问题查 secure_token 与 Offer;SDK 初始化问题查 初始化