您的位置:首页 > 移动开发 > IOS开发

[HAXE] haxe接入IOS版FacebookSdK以及iOS开发遇到的问题总结(二)

2016-07-04 13:05 771 查看

Extension与Haxe项目交互

haxe提供了类似JNI的方法,来调用extension中的函数。

Lib.load(“命名空间”,”函数名”,”参数个数”);

extension接口文件:

namespace mm{

Facebook* face;
AutoGCRoot *eval_onEvent = 0;
static value set_event_callback( value onCall ){
face =[[Facebook alloc] init];
eval_onEvent = new AutoGCRoot( onCall );
return alloc_bool( true );
}
DEFINE_PRIM( set_event_callback , 1 );

static void FBLogin_method(value login_callback){
[face loginFunc: val_string(login_callback)];
}
DEFINE_PRIM (FBLogin_method, 1);

void hypfb_dispatch_event( const char *sType , const char *sArg1 , const unsigned char *sArg2,int i  ){
printf("回调输出%s,%s\n", sType,sArg2);
buffer _buff = alloc_buffer_len(0);
if(sArg2!=nil){
buffer_append_sub(_buff,(char *)sArg2,i);
}

val_call3(
eval_onEvent->get( ) ,
alloc_string( sType ) ,
alloc_string( sArg1 ) ,
buffer_val(_buff)
);
}
}


haxe中的调用部分

private static var set_callback_method = Lib.load ("mm", "set_event_callback", 1);
public function init(){
set_callback_method(callback);
}

private function callback(methodID:String,arg1:String,arg2:Dynamic){
trace(“IOS回调"+ methodID:String +”,”+argument1+”,”+argument2);
}


haxe中的代码先通过set_callback_method将回调的callback传递给接口文件中的eval_onEvent,之后通过指定的methodID在callback函数中进行回调处理。

extension中oc++与接口交互

在接口文件赋值回调函数的同时也实例化了Facebook类,Facebook类用于实现了FacebookSDK的功能。

facebook类中函数调用以及回调示例如下:

-(void)loginFunc:(const char*)callbackFunc{

NSLog(@"facebook登陆开始执行");
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions: @[@"public_profile",@"user_friends"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error){
if(error){
NSLog(@"facebook登陆失败");
// mm::hypfb_dispatch_event(callbackFunc,"false",nil,0);
}else if(result.isCancelled){
NSLog(@"facebook取消登陆");
// mm::hypfb_dispatch_event(callbackFunc,"false",nil,0);
}else{
// mm::hypfb_dispatch_event(callbackFunc,"true",nil,0);

}
}];
}


遇到的问题:

回调haxe的参数,在接口文件中参数类型是模糊类型value,oc的数据怎么传回haxe项目中,一直在头疼中。。

如果在extension中要使用子线程要注意线程冲突,dispatch_async(dispatch_get_main_queue(), ^{ });

haxe调试真心很不方便

还有就是ios不提供设备标识符,所以在网上找了一个解决方案,用ios的钥匙串来保存,KeyChainDemo的链接:https://github.com/tenric/KeyChainDemo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  haxe ios开发