iOS 内购出现 返回 NSCocoaErrorDomain ErrorCode: -4097

复制代码
  // OC 侧代码
[_native setExternalInterface:@"startPayment" Callback:^(NSString* message) { NSString* str = [NSString stringWithFormat:@"Native %@ message: %@",cfunname, message]; NSData *data = [message dataUsingEncoding:NSUTF8StringEncoding]; NSError *error = nil; NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; if([SKPaymentQueue canMakePayments]){ NSLog(@"用户允许内购"); NSArray *product = [[NSArray alloc] initWithObjects:dic[@"good_id"], nil]; NSSet *nsset = [NSSet setWithArray:product]; SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset]; request.delegate = self; [request start]; }else{ NSLog(@"用户不允许内购"); [self onPaymentState:[NSString stringWithFormat:@"{\"productId\": \"%@\",\"msg\":\"您没有开启内购功能\",\"code\": %d}",product_id,3]]; } }
复制代码
复制代码
   // JavaScript 侧代码 
  var msg : any = {}; msg.env = 0; msg.user_id = GlobalModel.getInstance().getHostPlayer().dbId; msg.good_id = goods_id; // 注意 这里类型是一个 number。 var that = this; platform.startPayment(msg).then(function (res) { console.log(res); }).catch(function (errMsg) { console.log("iosPay !!!!", errMsg); })
复制代码

Xcode 报错   NSCocoaErrorDomain   ErrorCode: -4097  connection to service on pid 0 named storekitservice

排查了很久发现是传递的productIds参数的问题。报错时传递的数组内的元素类型是整数型,改为字符串就可以了。

也就是  

NSArray *product = [[NSArray alloc] initWithObjects:dic[@"good_id"], nil];
改成
NSArray *product = [[NSArray alloc] initWithObjects:[NSString stringWithFormat:@"%@", product_id] , nil];

就可以了。
在 JavaScript 层传过来的 number,在 OC 层 依然是 number, 就导致了这个问题。
可以 在真机测试的时候 通过 Device 的 Open Console 查看真机日志 看到更多的错误的详细信息。

posted @   lesten  阅读(1116)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示