cordova-plugin-purchase: iOS ничего не делает даже после вызова order

#ios #cordova #ionic-framework #in-app-purchase #cordova-plugins

#iOS #кордова #ionic-framework #покупка в приложении #кордова-плагины

Вопрос:

Мы используем Ionic и cordova-plugin-purchase (также известные как In App Purchase 2) для реализации подписки на покупку. Android работает отлично — именно iOS доставляет нам много проблем.

Вызов order функции с именем продукта должен показать всплывающее окно покупки iOS, и покупка должна продолжаться как обычно.

Однако после вызова order функции статус продукта подписки становится requested , но после этого ничего не происходит. Всплывающие окна не появляются. Странно то, что только вчера мы смогли приобрести продукт, и после истечения срока действия этой подписки мы смогли приобрести его снова. Это сработало просто отлично. Однако сегодня, после того, как срок действия продукта снова истек, нажатие функции заказа просто обновляет статус продукта requested , но после этого ничего не происходит. Purchase также отлично работает на Android — это просто iOS, которая чрезвычайно странная и всегда создает ошибки и проблемы. Иногда, когда мы меняем учетные записи в изолированной среде и используем новую, это работает, но иногда это просто внезапно перестает работать.

Мы постарались максимально упростить код до такой степени, что только они являются важными частями:

     // this just automatically sets the validator to the correct URL which changes depending on the user's ID.
    this.subscriptions.add(
      this.status.userData.subscribe(data => {
        this.userData = data;
        this.store.validator = `https://xxxxxxxxxxx/api/app/users/${ data.id }/purchased`;
      })
    );

    this.store.register([
      {
        id: this.MONTHLY_SUBSCRIPTION,
        type: this.store.PAID_SUBSCRIPTION
      },
      {
        id: this.YEARLY_SUBSCRIPTION,
        type: this.store.PAID_SUBSCRIPTION
      }
    ]);

    this.store.error((error) => {
      console.log('ERROR', error);
    });

    this.store.when(this.YEARLY_SUBSCRIPTION).updated((p) => {
      this.yearly = p;
      console.log('yearly', p.state);
    });

    this.store.when(this.MONTHLY_SUBSCRIPTION).updated((p) => {
      this.monthly = p;
      console.log('month', p.state);
    });

    this.store.when(this.YEARLY_SUBSCRIPTION)
        .approved(p => p.verify())
        .verified(p => p.finish())
        .owned(p => this.continue(true, p.id));

    this.store.when(this.MONTHLY_SUBSCRIPTION)
        .approved(p => p.verify())
        .verified(p => p.finish())
        .owned(p => this.continue(true, p.id));

    this.store.refresh();
 

Вызов this.store.order(this.MONTHLY_SUBSCRIPTION); ничего не делает. Забавная часть вызова this.store.order(this.YEARLY_SUBSCRIPTION); показывает всплывающее окно покупки iOS. Нет никаких выходных данных об ошибках или чего-либо еще. Мы также пытались использовать this.store.autoFinishTransactions = true; раньше this.store.refresh(); , но, похоже, это ничего не дало.

В последнее время нам не везет, и если кто-нибудь может предложить предложения или советы о том, как это исправить (может быть, это ошибка в плагине? Я действительно пытался отправить запрос, но …)

Заранее большое вам спасибо, и я с удовольствием предоставлю любую дополнительную информацию, если потребуется.

Ответ №1:

Согласно документации плагина, store.register() принимает объект, а не массив. Возможно, именно поэтому он регистрирует только последний продукт.

 store.register({
    id: "cc.fovea.inapp1",
    alias: "full version",
    type: store.NON_CONSUMABLE
});
 

https://github.com/j3k0/cordova-plugin-purchase/blob/master/doc/api.md#register

Другая возможность, о которой я могу подумать, заключается в том, что ваша MONTHLY_SUBSCRIPTION стоимость может не совпадать с идентификатором продукта вашего товара для покупки в приложении в app Store connect.