cocos2dx ios iap接入
添加头文件
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接入相关推荐
- 2013q3 android ios 用户接入网络方式pv占比分布,2012年移动互联网发展分析.pdf
2012年移动互联网发展分析 移劢亏联网发展趋势报告 2012Q2 0 综述 /4 目 录 C 1.1 移劢亏联网用户地域分布 /8 o n t 移动互联网用 1.1.1 全部移劢亏联网用户地域分布 ...
- Sonic常见问题解决方法之——设备中心出现多个iOS设备接入异常
[问题1]设备中心出现多个iOS设备接入异常 [出现原因]tidevice没有配置好,启动agent前确认tidevice list命令无报错,就不会出现这些异常的设备,如果不需要接入ios,可以参考 ...
- iOS PJSIP 接入
iOS PJSIP接入 1.PJSIP编译 2.PJSIP 对 G729 支持: 1.PJSIP编译 编译前先安装cmake 或升级,这一步自己搜搜. 到官网下载最新 release 版或其他版 ht ...
- Flutter实现微信支付和iOS IAP支付
Flutter支付 微信支付 iOS IAP应用内支付 测试IAP中断购买的测试 公司近期将收费的功能排期了,由于项目做的是线上教育,提供的服务属于虚拟物品.根据iOS官方的规定,虚拟物品交易只能使用 ...
- IOS iap处理逻辑流程图再次梳理
序言: 本文补全一下iOS iap处理逻辑. iap处理逻辑 苹果退单wiki:https://developer.apple.com/documentation/storekit/in-app_pu ...
- iOS应用接入Sign In With Apple
iOS应用接入Sign In With Apple流程 前言 准备工作 开始编写 总结 参考文献 前言 App Store审核要求: New Guidelines for Sign in with A ...
- cocos2dx项目中接入FairyGUI
一.参考链接 本篇文章参考链接 二.新建cocos2dx项目 1.找到cocos2dx的项目创建脚本文件: 以官方的cocos2d-x-3.17.2为例,项目创建的脚本文件在该目录下:cocos2d- ...
- creator 构建ios 项目 接入 google admob 横幅广告
最近研究了基于cocos creator 构建的 ios项目接入google的广告. Admob应用广告申请设置 1.在admob网站注册帐号等. https://apps.admob.com/ 2. ...
- IOS项目接入Vungle视频广告,单例类,可直接调用
IOS项目接入Vungle视频广告,单例类,为了图方便的 复制到项目里,可以直接调用显示 生产环境: XCode 10.1, Vungle: 6.3.2 调用方法: // 初始化: 参数是否打开日志 ...
最新文章
- VMware安装RedHat 6(64位)报错问题
- webbrowser 百度列表点击_百度信息流推广后台完整的实操流程!
- 【控制】《自动控制原理》胡寿松老师-第1章-自动控制的一般概念
- 用diag直接使用错误_用python学量子力学(1)
- HihoCoder - 1483 区间最值
- 【chorme插件开发】第三节:开发html的展示类型插件实例
- windows安装dcm4chee 出错 check file system group LOSSY_STORAGE for deletion
- git多人合作时,恢复误删文件
- Keras深度学习实战(1)——神经网络基础与模型训练过程详解
- jdk8 HashMap初始化和扩容机制
- java实现打印功能_Js 打印功能的实现(Java)
- win7 64bit部署SharePoint Server2010
- 再见所有的翻译工具!我使用了有道智云+Python开发一个批量文档翻译工具,老大对我赞不绝口
- JavaScript----事件
- 十种放松缓解压力方法
- 手机厂商要和年轻人交朋友,性价比日渐式微?
- DialogFragment以及AlertDialogFragment
- iOS 非越狱下的代码注入
- 解决ORA-28000:the account is locked,解锁oracle用户
- Linux内核优化(二):网络线程优化
热门文章
- 该如何选择IT培训机构?
- 区块链游戏行业大佬观点集合
- java毕业生设计休闲网络宾馆管理计算机源码+系统+mysql+调试部署+lw
- CleanMyMac X4.11苹果电脑系统清理工具
- 【数据库】关系数据库标准语言SQL
- 基于MQTT协议的远程监控-控制系统——ESP/STM32 MCUs 实现
- 每个Windows用户都应该知道的10个命令提示符技巧
- Mapinfo的TAB格式批量转GIS的SHP格式
- oracle报告指标,Oracle AWR报告指标全解析(三)
- The CompactFlash Association宣布推出CFexpress(R)2.0规范