Quantcast
Channel: Cocos中文社区 - 最新主题
Viewing all articles
Browse latest Browse all 88737

【干货分享】iOS内购恢复功能:恢复购买

$
0
0

@ZntxCYL 写道:

如果创建的是 “非消耗型” 的商品,苹果会要求程序必须包含 “恢复购买” 的功能:cold_sweat:

要不然审核会被拒绝,前几天就因为这个被拒审了:sob:

因为用的是AnySDK接的苹果支付,但是AnySDK只有支付 没有 “恢复购买” 的功能:fearful:

所以自己实现了一个:用的是JS调用原生OC实现请求恢复购买,然后取到已经购买的非消耗商品ID,再把商品ID传回JS进行恢复处理:dizzy_face:

上代码!!!

这是在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

阅读整个主题


Viewing all articles
Browse latest Browse all 88737

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>