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

Ouverte
#39 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
35/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
typescript
Domaine
mobile, payments

Piste de recherche

Start by tracing fetchSubscriptions and fetchItems, focusing on how _fetchedItems, _fetchedSubscriptions, and _fetchedProducts are populated and whether consecutive calls overwrite shared state. Confirm the behavior with a project that loads both subscription and in-app-purchase products; done means both product types remain available without polling or manually merging arrays.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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.

Langage dominant
TypeScript
Étoiles
35
Forks
13
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de NativeScript/payments

Toutes les issues de NativeScript/payments

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.