Skip to content

[@nativescript/payments] Not possible to use both subscriptions and IAPs in the same project #39

Description

@rdlauer

I have a situation where I offer two subscriptions and an additional "lifetime" subscription (which is really an in-app purchase, consumable). I may easily be mistaken, but the way the plugin implementation is designed, you can't really offer both subs and purchases because of an overwrite of _fetchedItems when calling both fetchSubscriptions and fetchItems consecutively?

My very hacky workaround is to:

  1. fetchSubscriptions where I normally would
  2. Call a separate method, like loadAll() after that:
  async loadAll() {
      await this.waitForSubscriptions();
      fetchItems(["com.nativescript.whatever.item]);
  }
  1. This will await subscriptions being loaded and waitForSubscriptions returns a promise when there is something in the array (yeah this isn't perfect):
  waitForSubscriptions(): Promise<void> {
      return new Promise<void>((resolve) => {
          const check = setInterval(() => {
              if (this._fetchedSubscriptions.length > 0) {
                  clearInterval(check);
                  resolve();        // now valid, since T is void
              }
          }, 500);
      });
  }
  1. After subscriptions are confirmed, then call fetchItems (see step 2).
  2. Finally merge the two arrays:
    if (this._fetchedSubscriptions.length > 0 && this._fetchedProducts.length > 0) {
        this._fetchedItems = [
            ...this._fetchedSubscriptions,
            ...this._fetchedProducts,
        ];
        console.log('Fetched subscription items:', this._fetchedItems);
    }

It's a little more complicated than this and I'd be happy to share my full code if anyone is curious.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions