我想为我的应用实现每月订阅服务,但我不知道哪种方法是正确的。
这是我的结构:
groups
-groupId
- premium:true/false
- owner: userId
这应该是流程:
用户可以购买1个月的订阅,这将使他选择的groupId / premium = true。
在一个月+宽限期后,如果用户尚未支付订阅费用,则groupId / premium应更改为false。
起初我以为我可以在Android设备上检查他的订阅是否有效,或者如果不是,并相应地更新数据。但是如果用户从未打开他的应用程序会发生什么?然后,我无法检查,他的团队保持优质,直到他打开应用程序?我无法做到这一点,因为有其他用户与该群组相关联,然后他们会获得免费订阅。
因此,我必须使用在appengine服务器上运行的每日cron作业执行此操作,该服务器每天都会检查哪些订阅到达其结束时间,然后检查用户是否已为其付费,并更新相应的数据库?
这意味着像这样向数据库添加更多节点。
- groupSubscriptions
- groupId
- ownerToken: token
- expireDate: timestamp
然后根据expireDate查询它,抓住ownerToken,并检查他们是否已支付IAP费用。
这是解决问题的正确方法吗?我是否想过这个?没有服务器可以吗?
答案 0 :(得分:1)
我不确定您的应用的优质操作是什么。但要说它能够读取特定的数据。在这种情况下,您可以在安全规则中对订阅到期进行建模。
首先,您要在数据库中的安全位置建模到期时间戳:
- userSubscriptions
- userId
- expireDate: timestamp
然后,您对需要订阅的数据有一个读取规则,该订阅会检查订阅是否已过期:
".read":
"root.child('userSubscriptions').child(auth.uid).child('expireDate').val() > now"
我在此示例中使用了uid
,但相同的逻辑可以应用于组。