You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ionic 6与In App Purchase 2无法获取商品信息求助

Ionic 6 In App Purchase 2苹果端商品加载失败排查方案

从你的日志可以明确看到核心问题:product io.ionic.cryptoalerts.pro.nonconsumable is NOT valid,苹果StoreKit返回的有效商品数量为0,说明商品ID不匹配或配置未生效。以下是针对性的排查和解决步骤:

一、核心配置校验

1. 商品ID完全匹配

  • 确认代码中PRODUCT_PRO_KEY的值io.ionic.cryptoalerts.pro.nonconsumable,与App Store Connect中创建的非消耗型商品的产品ID完全一致,包括大小写、标点符号,不能有任何差异。
  • 检查Xcode项目的Bundle ID(日志中显示为io.ionic.cryptoalerts),必须与App Store Connect中应用的Bundle ID完全一致。

2. App Store Connect商品状态确认

  • 商品必须处于已批准状态(不能是“准备提交”“等待审核”或“拒绝”状态)。
  • 必须为商品配置至少一个地区的价格,且价格层级已保存生效。
  • 商品的“显示名称”“描述”“本地化信息”等必填字段必须填写完整。

二、测试环境与账号

  • 测试内购必须使用沙盒测试账号登录设备,绝对不能使用真实Apple ID。
  • 沙盒测试账号需要在App Store Connect的「用户和访问」→「沙盒测试员」中创建,创建后在设备的「设置」→「App Store」中退出真实账号,再登录沙盒账号。
  • 注意:沙盒账号不能用于登录iCloud,只能用于App Store测试。

三、代码补充优化

在现有代码中添加错误监听,以便更精准定位问题,同时完善商品加载逻辑:

import { ChangeDetectorRef, Component } from '@angular/core';
import { IAPProduct, InAppPurchase2 } from '@awesome-cordova-plugins/in-app-purchase-2/ngx';
import { AlertController, ModalController, Platform } from '@ionic/angular';

const PRODUCT_PRO_KEY = 'io.ionic.cryptoalerts.pro.nonconsumable';

@Component({
  selector: 'app-in-app-purchase-modal',
  templateUrl: './in-app-purchase-modal.component.html',
  styleUrls: ['./in-app-purchase-modal.component.scss'],
})

export class InAppPurchaseModalComponent {

  isPro = false;
  products: IAPProduct[] = [];
  p: IAPProduct;

  constructor(
    private platform: Platform,
    private store: InAppPurchase2,
    private alertController: AlertController,
    private ref: ChangeDetectorRef,
    private modalController: ModalController
  ) {
    platform.ready().then(() => {
      // 调试模式
      this.store.verbosity = this.store.DEBUG;
      
      this.store.register({
        id: PRODUCT_PRO_KEY,
        type: this.store.NON_CONSUMABLE
      });

      // 监听商品批准事件
      this.store.when(PRODUCT_PRO_KEY)
        .approved(p => {
          console.log('商品已批准:', p);
          p.verify();
        })
        .verified(p => {
          console.log('商品已验证:', p);
          p.finish();
          // 标记用户为Pro
          this.isPro = true;
          this.ref.detectChanges();
        })
        // 添加错误监听
        .error((error) => {
          console.error('商品处理错误:', error);
        });

      // 监听无效商品事件
      this.store.when('product').invalid((product) => {
        console.error('无效商品ID:', product.id);
      });

      // 监听商品加载完成事件
      this.store.ready(() => {
        console.log('Store加载完成,商品列表:', this.store.products);
        this.products = Object.values(this.store.products);
        this.ref.detectChanges();
      });
      
      this.store.refresh();
    });
    
  }
}

四、Xcode与缓存清理

  • 清理Xcode缓存:菜单栏「Product」→「Clean Build Folder」(快捷键Cmd+Shift+K)。
  • 删除设备上的测试应用,重新编译安装。
  • 重启测试设备,避免StoreKit的缓存数据干扰。

内容的提问来源于stack exchange,提问作者Milivoje Vujadinović

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 13:45:32