基本上,我想要的是即使用户使用具有Firebase功能的Play Developer API使用iPhone或Web应用程序登录的用户,也可以检查用户帐户(带有Firestore的Firebase身份验证)中的链接订阅是否处于活动状态端)或特定平台代码(客户端),例如android kotlin。
更多信息
我正在使用云功能通过Pub / Sub在用户帐户(Firebase auth)中的Firestore上保存用户订阅,并将相同的订阅数据保存在本地db中。
我尝试过的事情
要检查用户帐户中的链接订阅是否处于活动状态,我正在检查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`);