@ZntxCYL 写道:
如果创建的是 “非消耗型” 的商品,苹果会要求程序必须包含 “恢复购买” 的功能
要不然审核会被拒绝,前几天就因为这个被拒审了
因为用的是AnySDK接的苹果支付,但是AnySDK只有支付 没有 “恢复购买” 的功能
所以自己实现了一个:用的是JS调用原生OC实现请求恢复购买,然后取到已经购买的非消耗商品ID,再把商品ID传回JS进行恢复处理
上代码!!!
这是在JS中开始调用OC的函数
// 恢复购买(调用OC静态函数) restorePurchasesStart: function () { try { // 使用原生去查找已购买的商品,然后再传回JS:第一个参数 IAPHelper 是类名,第二个参数 restorePurchases 是OC的静态函数名 jsb.reflection.callStaticMethod("IAPHelper", "restorePurchases"); } catch (err) { cc.log(err); } }
这是在OC中获得商品ID后调用传回JS的方法
// 恢复购买(OC调用,传回商品ID列表) restorePurchasesEnd: function (ids) { try { let productIds = ids.split(','); productIds.forEach(function(id) { // 在这里进行恢复处理 }, this); } catch (err) { cc.log(err); } }
OC中成功获取到已购买的非消耗商品ID后调用js传回商品ID
// 恢复购买完成 - (void)paymentQueueRestoreCompletedTransactionsFinished: (SKPaymentQueue *) queue { // 将商品ID用逗号分隔连接成字符串 NSString *ids = [productIds componentsJoinedByString:@","]; // 需要调用的JS函数:require('SDKHelpers').restorePurchasesEnd 是引用 SDKHelpers.js 文件里的 restorePurchasesEnd 函数 ('%@') 就是把商品ID当初参数传递过去 NSString *function = [NSString stringWithFormat: @"require('SDKHelpers').restorePurchasesEnd('%@')", ids]; // 转为C风格字符串 const char *stringFunc = [function UTF8String]; // outVal 是js函数的返回值,这里我们可以不管它 jsval *outVal; // OC调用JS,传回商品ID ScriptingCore::getInstance()->evalString(stringFunc, outVal); }
需求用到的朋友稍微修改一下就可以用了,都是基于Cocos Creator的。
Tips:这里只是代码片段,具体代码请点击这里到github下载
帖子: 3
参与者: 2