s***@gmail.com
s***@gmail.com
  • 发布:2026-03-23 14:35
  • 更新:2026-03-23 14:37
  • 阅读:12

iOS 已云打包自定义调试基座,但 uni.getProvider 无法获取 appleiap 通道

分类:uni-app

期望:
请官方协助判断:当前云打包产物是否 实际合入了 IAP 原生模块serviceReady / isAppExist 在本场景下的准确含义及排查清单。


manifest.json 核心配置(与 IAP 相关)

1)模块:开启 Payment

"app-plus": {  
    "modules": {  
        "Payment": {}  
    },  
    "payment": {  
        "ios": {  
            "iapTestMode": true  
        }  
    },

2)SDK:苹果应用内支付 + 支付宝仅 Android(避免 iOS 误编支付宝)

        "sdkConfigs": {  
            "payment": {  
                "alipay": {  
                    "__platform__": ["android"]  
                },  
                "appleiap": {}  
            }  
        }

`uni.getProvider({ service: 'payment' }) function success返回的内容 : [IAP] 获取到 appleiap 通道, {"id":"appleiap","description":"In-App Purchase","serviceReady":false,"isAppExist":false}

[Consumable] requestProduct 失败:, {"code":-100,"message":"Payment_appleiap:支付通道已关闭,https://ask.dcloud.net.cn/article/282","errCode":-100,"errMsg":"Payment_appleiap:支付通道已关闭,https://ask.dcloud.net.cn/article/282"} 请问我应该如何排查问题

2026-03-23 14:35 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

根据知识库信息,针对你的 iOS 云打包自定义基座 IAP 通道问题,分析如下:

关于 serviceReadyisAppExist 的含义

知识库中未明确给出这两个字段的详细定义,但从上下文推断:

  • serviceReady: false:表示 Apple IAP 支付通道当前处于未就绪状态,原生模块尚未完成初始化或未能成功连接到 Apple 支付服务。
  • isAppExist: false:在 iOS IAP 场景下,通常表示未能检测到有效的 IAP 支付环境(如未正确配置 Bundle ID、证书缺失 IAP 权限,或基座未包含 IAP 原生模块)。

重要提示HBuilder 标准基座不包含 IAP 通道,真机运行 IAP 功能必须使用自定义调试基座

排查清单(基于知识库)

请按以下步骤验证:

1. 确认基座类型(最关键)

  • 必须使用自定义基座:知识库明确说明,IAP 配置需要打包生效,真机运行时使用 HBuilder 标准基座无法获取 IAP 通道。
  • 重新打包基座:修改 manifest.json 后,必须重新打包 iOS 自定义调试基座,并确保安装到设备的是最新打包的基座(建议先卸载旧应用,删除 unpackage/debug/ 下的旧包再重新打包)。

2. 验证 manifest.json 配置

根据 Apple 应用内支付配置文档 检查:

"app-plus": {  
    "modules": {  
        "Payment": {}  
    },  
    "distribute": {  
        "sdkConfigs": {  
            "payment": {  
                "appleiap": {}  // 确保已勾选 Apple 应用内支付  
            }  
        }  
    }  
}

3. 检查证书与 Bundle ID

  • 证书权限:确保你的 Apple Developer 账号已开通 In-App Purchase 功能,且使用的证书(无论是开发证书还是 Ad Hoc 证书)已包含 IAP 权限。
  • Bundle ID 匹配manifest.json 中的 iOS Bundle ID 必须与 App Store Connect 中配置了 IAP 产品的 App ID 完全一致。
  • 沙盒测试:如果是测试环境,确保使用的是测试证书构建的自定义基座,且设备已登录沙盒测试账号。

4. 错误码 -100 "支付通道已关闭" 的可能原因

知识库中未明确解释此错误,但结合上下文,通常由以下原因导致:

  • 基座未包含 IAP 模块:即实际运行的仍是标准基座或未正确打包的基座。
  • 证书问题:使用了未开通 IAP 权限的证书打包。
  • 模块冲突:检查是否同时配置了其他支付 SDK(如支付宝)且未正确设置 __platform__ 限制,导致编译冲突。

5. 验证通道获取代码

确保你的代码正确筛选了 appleiap 通道:

uni.getProvider({  
  service: 'payment',  
  success: (res) => {  
    const iapChannel = res.providers.find((channel) => {  
      return channel.id === 'appleiap'  
    })  

    if (!iapChannel) {  
      console.error('当前包未包含 IAP 支付模块')  
      return  
    }  

    // 检查通道状态  
    console.log('IAP 通道状态:', iapChannel.serviceReady, iapChannel.isAppExist)  
  }  
})

建议的验证步骤

  1. 重新打包:在 HBuilderX 中,选择 "运行" → "运行到手机或模拟器" → "制作自定义基座",确保勾选 "自定义基座" 选项并等待云端打包完成。
  2. 清理缓存:删除设备上已安装的 App,删除本地 unpackage/debug/ 目录,重新安装新打包的基座。
  3. 检查控制台:确认基座启动日志中无 "打包时未添加 Payment 模块" 相关警告。

如果以上步骤确认无误仍无法解决,建议在 uni-app 官方技术交流群 中联系管理员协助检查云端打包日志,确认 IAP 原生模块是否实际合入。

内容为 AI 生成,仅供参考

要回复问题请先登录注册