用途:帮助开发者在 Google Play 订阅续费扣款失败时正确处理恢复流程,避免用户一失败就失去访问权限,并通过站内提醒促使用户修复支付方式。
主要阶段:Google Play 不会在续费失败的瞬间取消订阅,而是分两阶段恢复。静默宽限期约 1 天,始终生效;配置宽限期为 0 到 30 天,用户保持完整访问;账户冻结 0 到 30 天,访问被撤销;恢复后立即还原权限;最终失败则进入已取消或已过期。
关键事实:静默宽限期始终适用,即使配置为 0 天,也会并入更长宽限期(7 天即总计 7 天)。宽限期与正常续费在客户端 Purchase 对象上表现相同(isAutoRenewing = true,purchaseState == PURCHASED),不能用 queryPurchasesAsync() 判断,唯一来源是服务端 RTDN 与 SubscriptionPurchaseV2.subscriptionState。宽限期 expiryTime 指向宽限窗口结束时间。恢复后计费日重置为恢复日,需保存新的 expiryTime。若禁用账户冻结,宽限期结束后立即取消;通常建议同时启用两者。
主要能力:处理 SUBSCRIPTION_IN_GRACE_PERIOD、SUBSCRIPTION_ON_HOLD、SUBSCRIPTION_RECOVERED 三类转换 RTDN,设置 gracePeriod / onHold 标志,分别保持或撤销权益,并推送通知、安排邮件。客户端依据服务端状态分支显示宽限期横幅或账户冻结全屏页。可通过 showInAppMessages 的 TRANSACTIONAL 类别展示支付问题,返回 SUBSCRIPTION_STATUS_UPDATED 时重新同步后端。深链跳转 Play 订阅管理页:https://play.google.com/store/account/subscriptions?package=$pkg。
规则与限制:宽限期内绝不撤销权益;收到 ON_HOLD 必须立即撤销,不等待用户打开应用;以服务端标志而非 isAutoRenewing 为准;恢复时覆盖缓存续费日期;调整时长时优先延长而非缩短。宽限期与冻结期的具体时长、推送与邮件节奏需按业务自行制定。资料未提供具体定价、平台限制或官方 API 版本外的额外细节。