[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
相关文章推荐
- iOS开发之路--微博“更多”页面
- iOS开发之路--微博骨架搭建
- iOS开发使用JSON解析网络数据
- IOS开发代码分享之获取启动画面图片的string
- iOS开发实现音频播放功能
- iOS开发之视图切换
- iOS开发使用XML解析网络数据
- IOS开发实现录音功能
- iOS开发之UIScrollView详解
- IOS开发之路--C语言数组和字符串
- iOS开发之触摸事件
- IOS开发代码分享之用nstimer实现倒计时功能
- iOS开发使用GDataXML框架解析网络数据
- iOS开发之UITableView详解
- IOS开发代码分享之设置UISearchBar的背景颜色
- ios推送证书
- iOS和tvOS游戏按需加载资源简介
- ios开发之环境搭建-01
- 让iOS开发变得更有效率-分类、工具类