2017-06-14 63 views
0

我想为我的应用实施每月订阅,但我不知道哪种方法是正确的。每月订阅Firebase

这是我的结构:

groups 
-groupId 
    - premium:true/false 
    - owner: userId 

这应该是流程:

  1. 用户可以购买订阅1个月,这将让他选择的groupId /溢价=真。

  2. 经过一个月+宽限期后,如果用户尚未支付其认购费用,那么groupId/premium应更改为false。

起初,我以为我可以在Android设备上只检查,如果他订阅是活动的,或者如果它不是,并相应地更新数据。但接下来会发生什么如果用户从不打开他的应用程序?那么我无法检查,他的团队保持优质,直到他打开应用程序?我不能这样做,因为有其他用户与该组关联,然后他们将获得免费订阅。

因此,我必须在每天执行一个在appengine服务器上运行的cron作业来做到这一点,每天都会检查哪些订阅达到了他们的结束时间,然后检查相关用户是否为此付费,并更新相应的数据库?

这意味着像这样将更多节点添加到数据库中。

- groupSubscriptions 
    - groupId 
    - ownerToken: token 
    - expireDate: timestamp 

然后根据查询EXPIREDATE它,抓住ownerToken,并检查他们是否已经支付了IAP。

这是解决我的问题的正确方法吗?我是否在说这个?没有服务器可以吗?

回答

1

我不确定高级操作对您的应用程序有什么用处。但是,说这就像能够读取特定的数据一样。在这种情况下,您可以在安全规则中对订阅到期进行建模。

首先你会在一个安全的地方期满时间戳模型在数据库:

- userSubscriptions 
    - userId 
    - expireDate: timestamp 

然后你不得不对数据要求检查,认购还没有订阅的读取规则得到过期:

".read": 
    "root.child('userSubscriptions').child(auth.uid).child('expireDate').val() > now" 

我在这个例子中使用的uid,但同样的逻辑可以适用于群体。

+0

这听起来像是一个很好的解决方案,可以在订阅到期后保护高级选项不被使用。但是如果在Firebase数据库过期后对其进行更改,那么该怎么办?因为否则,集团国家仍然会说它是高级模式,即使它不是,然后用户可能会感到困惑。 – thechosenone