houmee实习日记4.2-4.9<2>
2015-04-15 00:00
246 查看
摘要: 实战IOS游戏接入App Store ----- store kit的游戏内置支付功能<2> 接入原理与流程------Object-C
这个参考很不错:http://blog.csdn.net/wanghexu09008126/article/details/17232395
这边我们来上c++跟oc桥接部分的代码,然后传给lua端
(noticeSender.h/noticeSender.cpp)
这两个是用来传给lua的,c++,与lua交互
继续,到(SDKlmpBridge.h/SDKlmpBridge.mm)、.mm是c++跟OC混编文件(我oc就学了几天,就被逼着写了,在公司跟在学校就是不同。哎。。。在学校就是撸)
接着:------------------(SDKlmpl.h/SDKlmpl.mm)----------------在这里我们来调用之前<1>里面写过的(ThepayTest.h/m /MyStoreObserver.h/m)里面的调用
这个参考很不错:http://blog.csdn.net/wanghexu09008126/article/details/17232395
这边我们来上c++跟oc桥接部分的代码,然后传给lua端
(noticeSender.h/noticeSender.cpp)
这两个是用来传给lua的,c++,与lua交互
// // NoticeSenter.h // HeroWar // // Created by huale_mac on 15-1-21. // // #ifndef __HeroWar__NoticeSenter__ #define __HeroWar__NoticeSenter__ enum { DO_LOGIN_SUCCEED = 1001, //登陆成功 DO_LOGIN_FAIL, //登陆失败 DO_LOGOUT_SUCCEED, //登出游戏成功 DO_PAY_SUCCEED, //支付成功 }; #include <stdio.h> #include "cocos2d.h" #include "string.h" using namespace cocos2d; class NoticeSenderToLua :public cocos2d::CCObject{ public: static NoticeSenderToLua* sharedNotification(); void SendMsgToLua(int eventId , void* obj); }; #endif /* defined(__HeroWar__NoticeSenter__) */
// // NoticeSenter.cpp // HeroWar // // Created by huale_mac on 15-1-21. // // #include "NoticeSender.h" static NoticeSenderToLua* _notification = NULL; NoticeSenderToLua* NoticeSenderToLua::sharedNotification() { if(!_notification) { _notification = new NoticeSenderToLua(); } return _notification; } void NoticeSenderToLua::SendMsgToLua(int eventId , void* obj) { char temp[10] = {0}; std::sprintf(temp, "%d",eventId); cocos2d::CCNotificationCenter::sharedNotificationCenter()->postNotification(temp, (cocos2d::CCObject*)obj ); }
继续,到(SDKlmpBridge.h/SDKlmpBridge.mm)、.mm是c++跟OC混编文件(我oc就学了几天,就被逼着写了,在公司跟在学校就是不同。哎。。。在学校就是撸)
// // SDKImplBridge.h // HeroWar // // Created by huale_mac on 15-1-21. // // #ifndef HeroWar_SDKImplBridge_h #define HeroWar_SDKImplBridge_h #include "cocos2d.h" //#include "ThepayTest.h" class SDKImplBridge : public cocos2d::CCObject { public: static SDKImplBridge* sharedInstance(); void end(); void isSDKLogin(); void doInit(); void doLogin( int loginHandler ); void doLogout(); bool showUserCenter(); void reCharge(int gold,int parambillId, char* parambillName,int paramserverId,int paramroleId,int paramgoodId, char* customParam); // CC_SYNTHESIZE( int, m_loginHandler, LoginHandler ); static int m_loginHandler; static std::string m_sid; void executeLoginCallback( void* sid, bool bLogin ); }; #endif
// // SDKImplBridge.cpp // HeroWar // // Created by huale_mac on 15-1-21. // // #include <stdio.h> #include "SDKImplBridge.h" #include "SDKImpl.h" #include "cocos2d.h" #include "CCLuaEngine.h" USING_NS_CC; static SDKImplBridge* instance = NULL; int SDKImplBridge::m_loginHandler = 0; std::string SDKImplBridge::m_sid = ""; SDKImplBridge* SDKImplBridge::sharedInstance() { if (! instance) { instance = new SDKImplBridge(); m_loginHandler = 0; } return instance; } void SDKImplBridge::executeLoginCallback( void* sid, bool bLogin ) { if (SDKImplBridge::m_loginHandler) { CCLuaEngine* pEngine = (CCLuaEngine*)(CCScriptEngineManager::sharedManager()->getScriptEngine()); cocos2d::CCLog("C++层打印= %s",(const char*)sid); pEngine->getLuaStack()->pushString( (const char*) sid ); pEngine->getLuaStack()->pushBoolean( bLogin ); pEngine->getLuaStack()->executeFunctionByHandler(SDKImplBridge::m_loginHandler, 2); pEngine->getLuaStack()->removeScriptHandler(SDKImplBridge::m_loginHandler); SDKImplBridge::m_loginHandler = 0; } } void SDKImplBridge::end() { if (instance) { delete instance; instance = NULL; } } void SDKImplBridge::isSDKLogin() { [[SDKImpl instance ]isSDKLogin ]; } void SDKImplBridge::doInit() { [[SDKImpl instance]doInit]; } void SDKImplBridge::doLogin(int loginHandler ) { SDKImplBridge::m_loginHandler = loginHandler; [[SDKImpl instance]doLogin]; } void SDKImplBridge::doLogout() { [[SDKImpl instance]doLogout]; } bool SDKImplBridge::showUserCenter() { return[[SDKImpl instance]showUserCenter]; } void SDKImplBridge::reCharge(int gold,int parambillId, char* parambillName,int paramserverId,int paramroleId,int paramgoodId, char* customParam) { [[SDKImpl instance]exchangeGoods:gold billId:parambillId billName:parambillName serverId:paramserverId roleId:paramroleId goodId:paramgoodId extraParam:customParam]; }
接着:------------------(SDKlmpl.h/SDKlmpl.mm)----------------在这里我们来调用之前<1>里面写过的(ThepayTest.h/m /MyStoreObserver.h/m)里面的调用
// // SDKImpl.h // moshou // // Created by DT on 14-9-23. // // #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> #import <NdComPlatform/NdComPlatform.h>//delete #import <StoreKit/StoreKit.h> #import "ThepayTest.h" #import "MyStoreObserver.h" @interface SDKImpl : NSObject { } +(SDKImpl *) instance; -(void) doInit; //had change -(bool) isSDKLogin; -(void) doLogin; //had change -(void) doLogout; -(bool) showUserCenter; -(void) exchangeGoods:(int)gold //had change billId:(int)parambillId billName:(const char *)parambillName serverId:(int)paramserverId roleId:(int)paramroleId goodId:(int)paramgoodId extraParam:(const char* )customParam; @property(readwrite,assign) bool bLogin; @property(readwrite,assign) bool bInit; @end
// // SDKImpl.m // moshou // // Created by DT on 14-9-23. // // #import "SDKImpl.h" #include <netinet/in.h> #include <sys/socket.h> #include <stdlib.h> #include <sys/types.h> #include <arpa/inet.h> #include "cocos2d.h" #include "NoticeSender.h" #include "SDKImplBridge.h" #import <NdComPlatform/NdComPlatform.h> #import <NdComPlatform/NdCPNotifications.h> #import <NdComPlatform/NdComPlatformError.h> // //static int const APP_ID = 116277; //static NSString *const APP_KEY = @"c28c0f2a464d65e39591e419dfdfbe5049aacf8df26b6502"; static SDKImpl *instance; //静态类对象,作用于全局 @implementation SDKImpl @synthesize bLogin = _bLogin; @synthesize bInit = _bInit; +(SDKImpl *) instance //静态类方法+ { if(!instance) instance = [[SDKImpl alloc] init]; //如果这个对象不存在,初始化他 instance = [[SDKImpl alloc] init]; return instance;返回instance return instance; } #pragma mark - < 调用接口 > - - (void) doInit { NSLog(@"初始化开始"); [self setBLogin:false]; [self setBInit:false]; NSLog(@"初始化结束"); } -(bool) isSDKLogin { return false; } - (void)doLogin { printf("sdkimpl dologin"); // if ( !self.bInit ) { // [self doInit]; // } // //注册监听消息 // // [[NdComPlatform defaultPlatform] NdLogin:0]; } - (void)doLogout { [[NdComPlatform defaultPlatform] NdLogout:0]; [[NSNotificationCenter defaultCenter] removeObserver:self]; } -(bool) showUserCenter { [[NdComPlatform defaultPlatform] NdEnterAppCenter:0]; return true; } //ios storekit paymentCallBack - (void) exchangeGoods:(int)gold //is here billId:(int)parambillId billName:(const char *)parambillName serverId:(int)paramserverId roleId:(int)paramroleId goodId:(int)paramgoodId extraParam:(const char* )customParam { NSLog(@"enter recharge!!!!"); //请求产品信息 ThepayTest * requestbuy1 = [[ThepayTest alloc] init]; [requestbuy1 requestProductData]; NSLog(@"exchangeGoods 's gold is %d" , gold); NSLog(@"print paramgoodID, %d" ,paramgoodId);// 这个1-7 NSLog(@"parambillName,%s",parambillName); // NSLog(@"给我打印一下parambillID, %s" ,parambillName); ThepayTest * requestbuy2 = [[ThepayTest alloc] init]; //必须要用第二个对象来进行购买参数传递 [requestbuy2 buy:gold goldnum:paramgoodId]; NSLog(@"payment success!"); // //2改 MyStoreObserver * myPayment = [[MyStoreObserver alloc] init]; //1改 [myPayment paymentQueue:payment updatedTransactions:payment];利用SKPaymentQueue里面的单例方法来调用然后添加列队 [[SKPaymentQueue defaultQueue] addTransactionObserver:[MyStoreObserver instance]]; } @end 到此storekit接入的代码基本完成了。
相关文章推荐
- 记录houmee实习日记4.2-4.9<1,2>中遇到的问题
- houmee实习日记22-30<3>
- 实习日记->第十天
- 实习日记->第二十六天
- houmee实习日记4.16
- 实习日记->第五天
- 黑马程序员-----学习日记<2>------基础总结1
- 实习日记->第四十三天
- 实习日记->第一天
- 实习日记->第十七天
- 实习日记->第三天
- 实习日记->第二十四天
- 实习日记->第二十九天
- 实习日记->第四十一天
- 实习日记->第四天
- 实习日记->第十二天
- 实习日记->最近两周的总结
- houmee实习日记4.20-22
- 实习日记->第四十二天
- 倔强青铜编程日记<2>:windows visual studio 下opencv以及opencv-contrib、samples的安装