js与oc间互相调用代码(含有部分支付统计分享)
2016-12-19 11:29
591 查看
.h代码:
@interface JSCallObjectCBridge : NSObject{
}
+ (void) JSCallObjectC:(NSMutableDictionary*) dict;
- (NSDictionary*) getJsonFromStr:(NSString*) json;
+ (JSCallObjectCBridge*) getInstance;
- (void) ObjectCCallJS:(NSString*) jsonStr;
-(void) applePaySuccess:(NSString*)productId;
- (UIViewController *)getCurrentVC;
- (void) shareSuccess;
@end
.mm代码:
PS:上面的代码为oc部分的js与oc的桥文件。
下面代码部分为js部分的js与oc的调用文件(在这里也有js调用java的方法)
@interface JSCallObjectCBridge : NSObject{
}
+ (void) JSCallObjectC:(NSMutableDictionary*) dict;
- (NSDictionary*) getJsonFromStr:(NSString*) json;
+ (JSCallObjectCBridge*) getInstance;
- (void) ObjectCCallJS:(NSString*) jsonStr;
-(void) applePaySuccess:(NSString*)productId;
- (UIViewController *)getCurrentVC;
- (void) shareSuccess;
@end
.mm代码:
#import <Foundation/Foundation.h> #import "JSCallObjectCBridge.h" #import "SDKTalkingData.h" #import "SDKApplePay.h" #import "SDKShare.h" #import "scripting/js-bindings/manual/cocos2d_specifics.hpp" @implementation JSCallObjectCBridge //SDK命令号 static int const CMD_TALKINGDATA = 1001; static int const CMD_LOG = 2001; static int const CMD_APPLEPAY = 4001; static int const CMD_MOBSHARE = 5001; static JSCallObjectCBridge* instance = nil; + (JSCallObjectCBridge*) getInstance { if (!instance) { instance = [JSCallObjectCBridge alloc]; [instance init]; } return instance; } + (void) JSCallObjectC:(NSString*) jsonStr { NSDictionary* dict = [[JSCallObjectCBridge getInstance] getJsonFromStr:jsonStr]; int cmd = [[dict objectForKey:@"cmd"] intValue]; switch (cmd) { case CMD_TALKINGDATA: [[SDKTalkingData getInstance] handlerEvent:dict]; break; case CMD_LOG: break; case CMD_APPLEPAY: [[JSCallObjectCBridge getInstance] appleDoPay:[dict copy]]; break; case CMD_MOBSHARE: [[SDKShare getInstance] handlerEvent:[dict copy]]; break; default: break; } } -(void) appleDoPay:(NSDictionary *)dict{ NSString *appleProductId = nil; appleProductId = [dict objectForKey:@"productId"]; NSLog(@"APPLE PAY %@,id:%@",dict,appleProductId); [[SDKApplePay getInstance] requestProductsPay:appleProductId]; //======!!!!!购买时的调用方法 } - (void) ObjectCCallJS:(NSString*) jsonStr { //NSString* msg = @"SDK.Test()"; ScriptingCore::getInstance()->evalString([jsonStr UTF8String]); } -(void) applePaySuccess:(NSString*)productId{ NSLog(@"applePaySuccess:%@",productId); NSMutableDictionary* dict = [[[NSMutableDictionary alloc] init] autorelease]; [dict setObject:@"4001" forKey:@"cmd"]; [dict setObject:productId forKey:@"productId"]; NSString *jsonStr = [self getJsonStrFromDictonar:dict]; NSString *msg = [NSString stringWithFormat:@"SDK.HandlerCallJs(%@)",jsonStr]; NSLog(@"applePaySuccess:%@",msg); [self ObjectCCallJS:msg]; } - (void) shareSuccess{ NSMutableDictionary* dict = [[[NSMutableDictionary alloc] init] autorelease]; [dict setObject:@"5001" forKey:@"cmd"]; NSString *jsonStr = [self getJsonStrFromDictonar:dict]; NSString *msg = [NSString stringWithFormat:@"SDK.HandlerCallJs(%@)",jsonStr]; [self ObjectCCallJS:msg]; } -(NSString*)getJsonStrFromDictonar:(NSMutableDictionary*)dict{ NSError * error = nil; NSData * jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error]; NSString * jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; return jsonStr; } - (NSDictionary*) getJsonFromStr:(NSString*) json { //转换成二进制数据 NSData * data = [json dataUsingEncoding:NSUTF8StringEncoding]; //解析JSON文件 OC中自带的方法 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; return dict; } //获取当前屏幕显示的viewcontroller - (UIViewController *)getCurrentVC { UIViewController *result = nil; UIWindow * window = [[UIApplication sharedApplication] keyWindow]; if (window.windowLevel != UIWindowLevelNormal) { NSArray *windows = [[UIApplication sharedApplication] windows]; for(UIWindow * tmpWin in windows) { if (tmpWin.windowLevel == UIWindowLevelNormal) { window = tmpWin; break; } } } UIView *frontView = [[window subviews] objectAtIndex:0]; id nextResponder = [frontView nextResponder]; if ([nextResponder isKindOfClass:[UIViewController class]]) result = nextResponder; else result = window.rootViewController; return result; } @end
PS:上面的代码为oc部分的js与oc的桥文件。
下面代码部分为js部分的js与oc的调用文件(在这里也有js调用java的方法)
/* 需要回调的写在这里面 */ HandlerCallJs:function(data){ var cmd = Number(data.cmd); switch(cmd){ case CMD_LOG: break; case CMD_TALKINGDATA: break; case CMD_GOOGLEPAY: //google支付回调 //data.productId(回调的key值) ShopObj.buyCallBack(data.productId); break; case CMD_MOBSHARE: //mobshare分享回调 NetWorkManager.sendfenxiang(); break; default: break; } }, JsCallJava:function(jsonStr){ //Js 调用 Java var result = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/JSCallJavaBridge","LuaCallJava","(Ljava/lang/String;)Ljava/lang/String;",jsonStr); cc.log("调用Java端成功" + result); return result; }, JsCallObject:function(jsonStr){ //Js 调用 Object var result = jsb.reflection.callStaticMethod("JSCallObjectCBridge","JSCallObjectC:",jsonStr); cc.log("调用OC端成功" + result); },
相关文章推荐
- iOS的JS和OC代码互相调用
- ios--网页js调用oc代码+传递参数+避免中文参数乱码的解决方案(实例)
- asp.net调用前台js调用后台代码分享
- JS部分代码分享
- swift:swift与oc代码互相调用
- iOS下JS与原生OC互相调用
- js实现精确统计网站访问量的代码分享
- [iOS Hybrid实践:UIWebView中Html中用JS调用OC方法,OC执行JS代码]
- asp.net调用前台js调用后台代码分享
- ios--网页js调用oc代码+传递参数+避免中文参数乱码的解决方案(实例)
- 利用JS 直接调用执行OC代码,非提取URL
- ios--网页js调用oc代码+传递参数+避免中文参数乱码的解决方案(实例)
- ios--网页js调用oc代码+传递参数+避免中文参数乱码的解决方案(实例)
- UIWebView中Html中用JS调用OC方法及OC执行JS代码
- asp.net调用前台js调用后台代码分享
- asp.net调用前台js调用后台代码分享
- 分享:WebView使用总结(应用函数与JS函数互相调用)
- asp.net调用前台js调用后台代码分享
- 基于JavaScriptCore的OC与JS互相调用
- iOS下JS与原生OC互相调用