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 查看真机日志 看到更多的错误的详细信息。
分类:
iOS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现