js与oc间互相调用代码(含有部分支付统计分享)

.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代码:
#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);
        },




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xunni_5241

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值