问题描述:我用Cocos Creator开发了一款游戏,之前已在苹果AppStore上架,但没有内购功能。这次我想尝试加一个内购,内购内容只有一个“去广告”。
我根据sdk-box官方的指引文档(https://docs.sdkbox.com/en/plugins/iap/v3-js/)和示例代码(https://github.com/sdkbox/sdkbox-sample-iap/blob/master/js/src/app.js)完成了基本的配置,包括在苹果官网申请IAP项目、测试账号、配置sdkbox_config.json等。然后又在cocos creator项目中添加了如下代码:
文件: IAPManager.js
window.IAPManager = {
listener:{
onSuccess: function (product) {
//Purchase success
console.warn("Purchase successful: " + product.name);
},
onFailure: function (product, msg) {
//Purchase failed
//msg is the error message
console.warn("Purchase failed: " + product.name + " error: " + msg);
},
onCanceled: function (product) {
//Purchase was canceled by user
console.warn("Purchase canceled: " + product.name);
},
onRestored: function (product) {
//Purchase restored
console.warn("Restored: " + product.name);
},
onProductRequestSuccess: function (products) {
// Returns you the data for all the iap products
// You can get each item using following method
try {
for (var i = 0; i < products.length; i++) {
console.warn("================");
console.warn("name: " + products[i].name);
console.warn("price: " + products[i].price);
console.warn("priceValue: " + products[i].priceValue);
console.warn("================");
}
} catch (error) {
console.warn(error)
return
}
},
onProductRequestFailure: function (msg) {
//When product refresh request fails.
console.warn("Failed to get products");
},
},
init: function () {
sdkbox.IAP.setListener(this.listener)
sdkbox.IAP.setDebug(true)
sdkbox.IAP.init()
},
}
然后在游戏的初始页面调用这里的IAPManager.init()。结果就遇到闪退的问题,在XCode中查看出错时的调用堆栈如下:
查看堆栈最顶部的几个函数,前两个是汇编码,看不懂。编号4的堆栈如下:
可见这里的函数名跟js代码中注册的listener是一样的。
这里的MAKE_V8_HAPPY是一个宏,定义如下:
再看往上的调用栈,如下:
程序就是崩在这里。在这儿用XCode的调试工具打印v8::Isolate::GetCurrent(),结果为0:

然后完全不知道怎么办了。网上关于creator版本的sdkbox资料太少了。
其他我经过尝试后发现的现象:
1.IAP插件能够正确读取到我在app store注册的商品信息,并打印出来
2.IAP的purchase等函数可以正常被调用,也会正确的弹出购买提示(前提是不注册任何listener)
3.但就是不能通过setListener注册Listener,一旦注册Listener就会在这里崩掉(即使注册的listener中把onProductRequestSuccess置为null或者不写)
其他信息:
-
Creator 版本:V2.1
-
目标平台: iOS
-
手机型号 :iPhone 8 plus
-
XCode 版本:
-
额外线索:有时候会出现低内存警告



