如何在应用启动时检查订阅?

Posted

技术标签:

【中文标题】如何在应用启动时检查订阅?【英文标题】:How to check subscription on app start? 【发布时间】:2017-06-21 10:34:56 【问题描述】:

我真的很享受 Ionic 2 应用程序的开发,但目前我在购买过程中遇到了一些问题。

如何在应用启动时检查用户是否进行了有效购买? 我想实现以下行为:

用户已订阅: -> 显示 PAGE A

用户没有订阅: -> 显示 PAGE B

订阅信息需要保存在本地吗?

** 编辑 **

我正在使用 firebase 后端,可以将购买的内容存储在那里。

这是我的功能:

buyCoach(productName: string): void 
    console.log(productName);
    InAppPurchase
        .getProducts([productName])
        .then((products) => 
            InAppPurchase
                .buy(productName)
                .then((data)=> 
                    // 
                    //   transactionId: ...
                    //   receipt: ...
                    //   signature: ...
                    // 

                    // maybe store somethign to firebase? But what?
                )
                .catch((err)=> 
                    console.log("error buy");
                    console.log(JSON.stringify(err));
                );
        )
        .catch((err) => 
            console.log("error getProducts");
            console.log(JSON.stringify(err));
        );

【问题讨论】:

【参考方案1】:

您需要一个身份验证和授权解决方案。 用户必须以某种方式被识别(认证)。您不需要实现您的,而是可以使用 Facebook、GooglePlus 或 Tweeter 的。您可以使用允许您的用户登录到这三个中的任何一个的 Azure 移动应用服务。

完成上述操作后,您就可以安全地调用您开发的服务,比如用户配置文件服务,它会告诉您用户拥有哪些订阅。

出于性能目的,您可以使用Ionic's Secure Storage 插件在本地存储此信息

要导航到另一个页面,您可以使用NavController.push 导航到页面。

【讨论】:

是的。此处需要用户信息等登录,以获取用户的订阅。是否在本地存储此信息是个坏主意。将其存储在链接到用户的数据库中,因此,当用户从任何其他平台/设备登录时,订阅信息将来自数据库。 nav.push(PageA) 应该足够简单。 听起来不错,我已经在我的 ionic 2 应用程序中使用 firebase 作为后端。但是,如果用户仍有活动订阅,我如何检查时间间隔或其他内容?【参考方案2】:

我不知道我的问题是否正确,但您可以执行以下操作来检查用户是否已登录(通过电子邮件、Facebook、谷歌等)并能够购买:

firebase.auth().onAuthStateChanged(function(user)  // CREATES AN OBSERVABLE TO WATCH IF THE USER CHANGES IT STATES, LIKE LOGOFF
  if (user)  //
    this.rootPage = Page_A; // THE USER IS LOGGED, SHOW PAGE A
   else 
    this.rootPage = Page_B; // USER NOT LOGGED, PAGE B
  
);

如果您想知道用户在离开应用时是否有未完成的购买,您可以执行以下操作:

将用户 ID 保存在 localStorage/SQLite 上。 如果用户没有帐户(如果您希望他们在不登录的情况下购买)使用带有购物车信息的 firebase 方法 .push(),它将生成一个随机密钥,您可以在承诺返回中获取该密钥使用.then()。 在您的根页面(A 和 B)中有一个 ionViewWillLeave() 方法,可将当前购物车保存在他的 firebase 节点中(使用保存的 uid)。 在应用程序打开时,您会从 firebase 获取购物车(如果存在)和 itens(最好在您的 rootPage 上使用 ionViewDidLoad() 或类似的东西在 app.componentdeviceReady() 上执行此操作,它可能会变慢稍微降低你的应用程序) 应用退出时,如果购物车为空,则从数据库中删除购物车节点,如果不是,则覆盖保存的购物车。

试试这样的数据库:

/Users
|_ User_uid
   |_ User_Info_Node
   |  |_ USER_NAME //AND CITY, PHONE, ETC.
   |_ CART
      |_ CART_ITEM1_ID
      |_ CART_ITEM2_ID
      |_ CART_ITEM3_ID

【讨论】:

以上是关于如何在应用启动时检查订阅?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Paypal API / SDK,我将如何检查某个订阅 ID? C#

如何检查我是不是已经订阅了 parse.com 推送通知

React Native iOS:检查通知权限内存泄漏,如何在应用启动时检查通知权限?

如何在启动 C++ 应用程序时检查 mongodb 是不是正在运行

应用程序启动时如何检查可用的互联网连接[重复]

Django:如何在启动时禁用数据库状态检查?