【发布时间】:2020-09-29 12:58:04
【问题描述】:
基本上,我想要的是能够检查用户帐户中的链接订阅(firebase auth with firestore)是否处于活动状态,即使用户使用 iPhone 或使用具有 firebase 功能的 play 开发人员 API 的 Web 应用程序登录(服务器-side) 或特定平台代码(客户端),例如 android kotlin。
更多信息
我正在使用 Pub/Sub 使用云功能将用户订阅保存在用户帐户 (Firebase auth) 中的 firestore 上,并且我正在将相同的订阅数据保存在本地数据库中。
我尝试了什么
要检查用户帐户中的链接订阅是否处于活动状态,我正在检查expiryTimeMillis 是否在当前日期之后或autoRenewing 已启用:
suspend fun isPremiumActive(userId: String): Boolean {
val userSubscriptionData = localDB.getUserSubscription(userId)
if (userSubscriptionData == null)
return false
else
return Date(userSubscriptionData.expiryTimeMillis).after(Date()) ||
userSubscriptionData.autoRenewing
}
但是使用 java Date 有很多缺点,因为它受设备日期的影响。
我考虑过使用服务器时间戳,但这会很困难,因为用户订阅受时区限制(据我所知)。
那么有没有其他方法可以检查订阅当前是否处于活动状态?我错过了什么吗?
一些用例
用户可以登录(在应用程序中使用 firebase 身份验证)并且该帐户具有关联的订阅,因此如果关联的订阅有效,即使设备没有相同的帐户要支付,我也应该提供高级功能订阅,甚至用户正在使用 iPhone,所以这就是我不能打电话的原因:
billingClient.queryPurchases()
更新
此打字稿代码是否被认为可以安全检查订阅是否处于活动状态?
const serverTime = admin.firestore.Timestamp.now().toDate()
const subscriptionTime = new Date(subscripton.exipryTimeInMilis)
if (subscripton.autoRenewing || subscriptionTime > serverTime)
console.log(`subscription is active`);
【问题讨论】:
标签: typescript kotlin google-cloud-functions google-play-developer-api in-app-subscription