添加头文件

CBiOSStoreManager.h

/**  CBiOSStoreManager.h*/#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>@interface CBiOSStoreManager : NSObject<SKProductsRequestDelegate,SKPaymentTransactionObserver>
{int buyType;NSString* _buyProductIDTag;NSString* orderId;NSString* amount;int quantity;
}+ (CBiOSStoreManager*) sharedInstance;- (void) buy:(NSString*)buyProductIDTag quantity:(int)quilty orderid:(NSString *)orderId amount:(NSString *)amt;- (bool) CanMakePay;
- (void) initialStore;
- (void) releaseStore;
- (void) requestProductData:(NSString*)buyProductIDTag;
- (void) provideContent:(NSString *)product;
- (void) recordTransaction:(NSString *)product;- (void) requestProUpgradeProductData:(NSString*)buyProductIDTag;
- (void) paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions;
- (void) purchasedTransaction: (SKPaymentTransaction *)transaction;
- (void) completeTransaction: (SKPaymentTransaction *)transaction;
- (void) failedTransaction: (SKPaymentTransaction *)transaction;
- (void) paymentQueueRestoreCompletedTransactionsFinished: (SKPaymentTransaction *)transaction;
- (void) paymentQueue:(SKPaymentQueue *) paymentQueue restoreCompletedTransactionsFailedWithError:(NSError *)error;
- (void) restoreTransaction: (SKPaymentTransaction *)transaction;
- (void) netWaiting;
- (void) removeWaiting;
@end

  添加源文件

CBiOSStoreManager.mm
/**  CBiOSStoreManager.mm*/#import "CBiOSStoreManager.h"
#import "AppController.h"@implementation CBiOSStoreManagerstatic CBiOSStoreManager* _sharedInstance = nil;+(CBiOSStoreManager*)sharedInstance
{@synchronized([CBiOSStoreManager class]){if (!_sharedInstance)[[self alloc] init];return _sharedInstance;}return nil;
}+(id)alloc
{@synchronized([CBiOSStoreManager class]){NSAssert(_sharedInstance == nil, @"Attempted to allocate a second instance of a singleton.\n");_sharedInstance = [super alloc];return _sharedInstance;}return nil;
}-(id)init {self = [super init];if (self != nil) {// initialize stuff here}return self;
}-(void)initialStore
{[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
}
-(void)releaseStore
{[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
}-(void)buy:(NSString*)buyProductIDTagquantity:(int) quiltyorderid:(NSString *)orderamount:(NSString *)amt
{[self netWaiting];[self requestProductData:buyProductIDTag];quantity = quilty ;orderId = [order retain];amount = [amt retain];
}-(bool)CanMakePay
{return [SKPaymentQueue canMakePayments];
}   -(void)requestProductData:(NSString*)buyProductIDTag
{NSLog(@"---------Request product information------------\n");_buyProductIDTag = [buyProductIDTag retain];NSArray *product = [[NSArray alloc] initWithObjects:buyProductIDTag,nil];NSSet *nsset = [NSSet setWithArray:product];SKProductsRequest *request=[[SKProductsRequest alloc] initWithProductIdentifiers: nsset];request.delegate=self;[request start];[product release];
}- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{NSLog(@"-----------Getting product information--------------\n");NSArray *myProduct = response.products;NSLog(@"Product ID:%@\n",response.invalidProductIdentifiers);NSLog(@"Product count: %d\n", [myProduct count]);// populate UIfor(SKProduct *product in myProduct){NSLog(@"Detail product info\n");NSLog(@"SKProduct description: %@\n", [product description]);NSLog(@"Product localized title: %@\n" , product.localizedTitle);NSLog(@"Product localized descitption: %@\n" , product.localizedDescription);NSLog(@"Product price: %@\n" , product.price);NSLog(@"Product identifier: %@\n" , product.productIdentifier);}SKPayment *payment = nil;//payment  = [SKPayment paymentWithProductIdentifier:_buyItemIDTag];//[_buyItemIDTag autorelease]
//    switch (buyType) {
//        case IAP0p99:
//            payment  = [SKPayment paymentWithProductIdentifier:ProductID_IAP0p99];    //支付$0.99
//            break;
//        case IAP1p99:
//            payment  = [SKPayment paymentWithProductIdentifier:ProductID_IAP1p99];    //支付$1.99
//            break;
//        case IAP4p99:
//            payment  = [SKPayment paymentWithProductIdentifier:ProductID_IAP4p99];    //支付$9.99
//            break;
//        case IAP9p99:
//            payment  = [SKPayment paymentWithProductIdentifier:ProductID_IAP9p99];    //支付$19.99
//            break;
//        case IAP24p99:
//            payment  = [SKPayment paymentWithProductIdentifier:ProductID_IAP24p99];    //支付$29.99
//            break;
//        default:
//            break;
//    }if([myProduct count] == 0){return ;}payment = [SKPayment paymentWithProduct:[response.products objectAtIndex:0]];//   payment.quantity = quantity;NSLog(@"---------Request payment------------\n");[[SKPaymentQueue defaultQueue] addPayment:payment];// [request autorelease];}
- (void)requestProUpgradeProductData:(NSString*)buyProductIDTag
{NSLog(@"------Request to upgrade product data---------\n");NSSet *productIdentifiers = [NSSet setWithObject:buyProductIDTag];SKProductsRequest* productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];productsRequest.delegate = self;[productsRequest start];    }- (void)request:(SKRequest *)request didFailWithError:(NSError *)error
{NSLog(@"-------Show fail message----------\n");UIAlertView *alerView =  [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"错误",NULL) message:[error localizedDescription]delegate:nil cancelButtonTitle:NSLocalizedString(@"确定",nil) otherButtonTitles:nil];[alerView show];[alerView release];[self removeWaiting];
}   -(void) requestDidFinish:(SKRequest *)request
{NSLog(@"----------Request finished--------------\n");}   -(void) purchasedTransaction: (SKPaymentTransaction *)transaction
{NSLog(@"-----Purchased Transaction----\n");NSArray *transactions =[[NSArray alloc] initWithObjects:transaction, nil];[self paymentQueue:[SKPaymentQueue defaultQueue] updatedTransactions:transactions];[transactions release];
}    - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{[self removeWaiting];NSLog(@"-----Payment result--------\n");for (SKPaymentTransaction *transaction in transactions){switch (transaction.transactionState){case SKPaymentTransactionStatePurchased:[self completeTransaction:transaction];NSLog(@"-----Transaction purchased--------\n");/*      UIAlertView *alerView =  [[UIAlertView alloc] initWithTitle:@"Congratulation"message:@"Transaction suceed!"delegate:nil cancelButtonTitle:NSLocalizedString(@"Close",nil) otherButtonTitles:nil];   [alerView show];[alerView release];*///NSData *data = transaction.transactionReceipt;//NSString *para = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];AppController* pController = (AppController*)[UIApplication sharedApplication].delegate;[pController payOK];break;case SKPaymentTransactionStateFailed:[self failedTransaction:transaction];NSLog(@"-----Transaction Failed--------\n");UIAlertView *alerView2 =  [[UIAlertView alloc] initWithTitle:@"提示"message:@"交易已取消"delegate:nil cancelButtonTitle:NSLocalizedString(@"确定",nil) otherButtonTitles:nil];[alerView2 show];[alerView2 release];break;case SKPaymentTransactionStateRestored:[self restoreTransaction:transaction];NSLog(@"----- Already buy this product--------\n");case SKPaymentTransactionStatePurchasing:[self netWaiting];NSLog(@"-----Transcation puchasing--------\n");break;default:break;}}
}- (void) completeTransaction: (SKPaymentTransaction *)transaction
{NSLog(@"-----completeTransaction--------\n");// Your application should implement these two methods.NSString *product = transaction.payment.productIdentifier;if ([product length] > 0) {   NSArray *tt = [product componentsSeparatedByString:@"."];NSString *bookid = [tt lastObject];if ([bookid length] > 0) {NSLog(@"bookid = %@",bookid);[self recordTransaction:bookid];[self provideContent:bookid];}}   // Remove the transaction from the payment queue.   [[SKPaymentQueue defaultQueue] finishTransaction: transaction];   }   -(void)recordTransaction:(NSString *)product
{NSLog(@"-----Record transcation--------\n");// Todo: Maybe you want to save transaction result into plist.
}   -(void)provideContent:(NSString *)product
{NSLog(@"-----Download product content--------\n");
}   - (void) failedTransaction: (SKPaymentTransaction *)transaction
{NSLog(@"Failed\n");if (transaction.error.code != SKErrorPaymentCancelled){}[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
-(void) paymentQueueRestoreCompletedTransactionsFinished: (SKPaymentTransaction *)transaction
{   }- (void) restoreTransaction: (SKPaymentTransaction *)transaction
{NSLog(@"-----Restore transaction--------\n");
}-(void) paymentQueue:(SKPaymentQueue *) paymentQueue restoreCompletedTransactionsFailedWithError:(NSError *)error
{NSLog(@"-------Payment Queue----\n");
}#pragma mark connection delegate
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{NSLog(@"%@\n",  [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{   }   - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{switch([(NSHTTPURLResponse *)response statusCode]) {case 200:case 206:break;case 304:break;case 400:break;case 404:break;case 416:break;case 403:break;case 401:case 500:break;default:break;}
}   - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{NSLog(@"test\n");
}   -(void)dealloc
{[super dealloc];
}static bool g_waiting = false;
-(void)netWaiting{AppController* pController = (AppController *)[UIApplication sharedApplication].delegate;[pController execLua:"popBusyScene()"] ;g_waiting = true;
}-(void)removeWaiting{if(g_waiting){AppController* pController = (AppController *)[UIApplication sharedApplication].delegate;[pController execLua:"removeBusyScene()"] ;g_waiting = false;}
}@end

  

在AppController.mm 中 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions () 中添加iap初始化

    /***** init iap  ********************/[[CBiOSStoreManager sharedInstance] initialStore];

  

付费调用接口,我这边是暴露给lua使用的

static int sdkPay_ios(lua_State *tolua_S){tolua_Error tolua_err;if (!tolua_isnumber(tolua_S , 1 , 0 , &tolua_err) ||!tolua_isstring(tolua_S , 2 , 0 , &tolua_err) ||!tolua_isstring(tolua_S , 3 , 0 , &tolua_err)){return 0;}int paycode = (int) tolua_tonumber(tolua_S, 1, 0);const char* amount = tolua_tostring(tolua_S , 2, 0);const char* extr  = tolua_tostring (tolua_S , 3 , 0);NSString *productId = [[NSString alloc] initWithFormat:@"d%02d",paycode];NSString *amt = [NSString stringWithUTF8String:amount];if ([SKPaymentQueue canMakePayments]){[[CBiOSStoreManager sharedInstance] buy:productIdquantity:1orderid:@"orderid"amount:amt];}return 0;
}

  

转载于:https://www.cnblogs.com/JhonKing/p/5803183.html

cocos2dx ios iap接入相关推荐

  1. 2013q3 android ios 用户接入网络方式pv占比分布,2012年移动互联网发展分析.pdf

    2012年移动互联网发展分析 移劢亏联网发展趋势报告 2012Q2 0 综述 /4 目 录 C 1.1 移劢亏联网用户地域分布 /8 o n t 移动互联网用 1.1.1 全部移劢亏联网用户地域分布 ...

  2. Sonic常见问题解决方法之——设备中心出现多个iOS设备接入异常

    [问题1]设备中心出现多个iOS设备接入异常 [出现原因]tidevice没有配置好,启动agent前确认tidevice list命令无报错,就不会出现这些异常的设备,如果不需要接入ios,可以参考 ...

  3. iOS PJSIP 接入

    iOS PJSIP接入 1.PJSIP编译 2.PJSIP 对 G729 支持: 1.PJSIP编译 编译前先安装cmake 或升级,这一步自己搜搜. 到官网下载最新 release 版或其他版 ht ...

  4. Flutter实现微信支付和iOS IAP支付

    Flutter支付 微信支付 iOS IAP应用内支付 测试IAP中断购买的测试 公司近期将收费的功能排期了,由于项目做的是线上教育,提供的服务属于虚拟物品.根据iOS官方的规定,虚拟物品交易只能使用 ...

  5. IOS iap处理逻辑流程图再次梳理

    序言: 本文补全一下iOS iap处理逻辑. iap处理逻辑 苹果退单wiki:https://developer.apple.com/documentation/storekit/in-app_pu ...

  6. iOS应用接入Sign In With Apple

    iOS应用接入Sign In With Apple流程 前言 准备工作 开始编写 总结 参考文献 前言 App Store审核要求: New Guidelines for Sign in with A ...

  7. cocos2dx项目中接入FairyGUI

    一.参考链接 本篇文章参考链接 二.新建cocos2dx项目 1.找到cocos2dx的项目创建脚本文件: 以官方的cocos2d-x-3.17.2为例,项目创建的脚本文件在该目录下:cocos2d- ...

  8. creator 构建ios 项目 接入 google admob 横幅广告

    最近研究了基于cocos creator 构建的 ios项目接入google的广告. Admob应用广告申请设置 1.在admob网站注册帐号等. https://apps.admob.com/ 2. ...

  9. IOS项目接入Vungle视频广告,单例类,可直接调用

    IOS项目接入Vungle视频广告,单例类,为了图方便的 复制到项目里,可以直接调用显示 生产环境: XCode 10.1,  Vungle: 6.3.2 调用方法: // 初始化: 参数是否打开日志 ...

最新文章

  1. VMware安装RedHat 6(64位)报错问题
  2. webbrowser 百度列表点击_百度信息流推广后台完整的实操流程!
  3. 【控制】《自动控制原理》胡寿松老师-第1章-自动控制的一般概念
  4. 用diag直接使用错误_用python学量子力学(1)
  5. HihoCoder - 1483 区间最值
  6. 【chorme插件开发】第三节:开发html的展示类型插件实例
  7. windows安装dcm4chee 出错 check file system group LOSSY_STORAGE for deletion
  8. git多人合作时,恢复误删文件
  9. Keras深度学习实战(1)——神经网络基础与模型训练过程详解
  10. jdk8 HashMap初始化和扩容机制
  11. java实现打印功能_Js 打印功能的实现(Java)
  12. win7 64bit部署SharePoint Server2010
  13. 再见所有的翻译工具!我使用了有道智云+Python开发一个批量文档翻译工具,老大对我赞不绝口
  14. JavaScript----事件
  15. 十种放松缓解压力方法
  16. 手机厂商要和年轻人交朋友,性价比日渐式微?
  17. DialogFragment以及AlertDialogFragment
  18. iOS 非越狱下的代码注入
  19. 解决ORA-28000:the account is locked,解锁oracle用户
  20. Linux内核优化(二):网络线程优化

热门文章

  1. 该如何选择IT培训机构?
  2. 区块链游戏行业大佬观点集合
  3. java毕业生设计休闲网络宾馆管理计算机源码+系统+mysql+调试部署+lw
  4. CleanMyMac X4.11苹果电脑系统清理工具
  5. 【数据库】关系数据库标准语言SQL
  6. 基于MQTT协议的远程监控-控制系统——ESP/STM32 MCUs 实现
  7. 每个Windows用户都应该知道的10个命令提示符技巧
  8. Mapinfo的TAB格式批量转GIS的SHP格式
  9. oracle报告指标,Oracle AWR报告指标全解析(三)
  10. The CompactFlash Association宣布推出CFexpress(R)2.0规范