VNDesktop 接入接口文档
LoadVideoNativeDll.h
代码接口
主要接口
void VN_InitViewsContentClient(int argc, const char** argv, void (*pMain)(), void *app_delegate);
void VN_InitHybridViewsContentClient(int argc, const char** argv, void (*pMain)());
bool VN_GetQVNVideoNative(IQVNVideoNative **pQVNVideoNative);
void VN_InitPictureDataManager(LPCWSTR sqliteDBPath, LPCWSTR tableName);
void VN_SetCookieFilePath(const char *cookieFilePath); // utf8 coding
void VN_InitVNStorage(const char *sqliteDBPath, const char* storageTable); // utf8 coding
bool VN_CreateDataBuffer(IDataBuffer** ppBuffer);
void VN_SetExternalDataFetcher(const char* key, ExternalDataCallback callback); // utf8 coding
BOOL VN_GetExternalManager(IVNExternalManager** pExternalManager);
接口和示例
bool VN_GetQVNVideoNative(IQVNVideoNative **pQVNVideoNative);
This function should be called on the main application thread when the application start.
It will initialize and return a global IQVNVideoNative instance object,
and use this global instance to load and close VideoNative page or app.
#include "LoadVideoNativeDll.h"
#pragma comment(lib, "VideoNative.lib")
CComPtr<IQVNVideoNative> vn;
VN_GetQVNVideoNative(&vn);
IQVNVideoNative.h
代码
IQVNVideoNative
/**
* IQVNVideoNative is a global instance object, created by VN_GetQVNVideoNative, use to load and close VideoNative page or app.
* IQVNVideoNative 是一个单例类,主要提供获取 VNApp 和 VNPage 的接口,以及提供全局 JSApi 、以及 Native 组件的注册
**/
IQVNVideoNative主要接口
/**
* 根据 AppID 从指定的目录获取 App
* @param appId app对应id
* @param rootUrl 根目录,图片资源、跳转链接等路径会以此路径做转换
* @param[out] pVNApp对应的VNApp
**/
virtual void STDMETHODCALLTYPE getVNApp(const std::string &appId, const std::string &rootUrl, IQVNApp **pVNApp) = 0;
/**
* 销毁app
**/
virtual void STDMETHODCALLTYPE closeApp(const std::string& appId) = 0;
/**
* 销毁所有app
**/
virtual void STDMETHODCALLTYPE closeApps() = 0;
/**
* 加载App单页面,该页面具有 vn.navigate、vn.app 等能力
* @param appId AppId
* @param rootUrl 根目录,图片资源、跳转链接等路径会以此路径做转换
* @param pageUrl 页面相对于 RootUrl 的路径
* @param callback 异步回调
**/
virtual void STDMETHODCALLTYPE loadAppPage(const std::string & appId, const std::string &rootUrl, const std::string &pageUrl, void* parentCtl, IVNLoadPageCallback *callback) = 0;
/**
* 加载单页面。不同于通过 VNApp 加载页面,本方法不需要 AppId,而是直接通过路径来加载页面
* vn.navigate、vn.app是无法运作的。请强持有回调中的 IQVNPage 对象
* @param rootUrl 根目录,图片资源、跳转链接等路径会以此路径做转换
* @param pageUrl 页面相对于 RootUrl 的路径
* @param callback 异步回调
**/
virtual void STDMETHODCALLTYPE loadSinglePage(const std::string &rootUrl, const std::string &pageUrl, void* parentCtl, IVNLoadPageCallback *callback) = 0;
/**
* 注册 Native 组件
* @param widgetName 组件名称
* @param widgetClass 组件类名
**/
virtual void STDMETHODCALLTYPE registerWidget(const std::string &widgetName, const std::string &widgetClass) = 0;
/**
* 获取当前 Native 组件映射表
**/
virtual std::unordered_map<std::string, std::string>* STDMETHODCALLTYPE getNativeWidgetMap() = 0;
/**
* 设置基础组件拦截器
**/
virtual void STDMETHODCALLTYPE setInjector(IVNInjector *injector) = 0;
/**
* 获取拦截器
**/
virtual BOOL STDMETHODCALLTYPE getInjector(IVNInjector** pInjector) = 0;
/**
* 开启V8调试
**/
virtual void STDMETHODCALLTYPE enableDebugger(bool enable) = 0;
IQVNApp.h
代码接口:
IQVNApp
/**
* IQVNApp 是一组 VideoNative 页面构成的集合,拥有 AppId 等属性,
* 每个 IQVNApp 的存储空间是相互隔离的(可以类比下小程序),
* IQVNApp 提供直接进入指定 VideoNative 页面,以及获取指定某个单页面的能力。
* IQVNApp 的特点是可以做到业务隔离,同时相比 IQVNApp,可以更方便地实现多个页面之间共享数据,简化页面之间的跳转逻辑
**/
IQVNApp主要接口
/**
* 初始化一个app
* @param appid 当前app的id
* @param dir app相对路径
**/
virtual void STDMETHODCALLTYPE initWithAppId(const std::string &appid, const std::string &dir) = 0;
/**
* 外部调用关闭 App,用于 VN 内部进行资源清理
* 比如外部强制访问 NavigationController 然后清理其堆栈
* 此时 VN 是不知晓的,需要调用该接口进行通知 VN
**/
virtual void STDMETHODCALLTYPE closeApp() = 0;
/**
* 启动一个app的页面
* @param parentCtl NativeController,作为跳转App的起点,GF实现上,就是IGFFrame *
* @param pageUrl 页面 URL
* @param animation 是否需要 Push 动画,默认需要
**/
virtual void STDMETHODCALLTYPE startApp(void * parentCtl, const std::string &pageUrl, BOOL animation = TRUE) = 0;
/**
* 请求一个 App 页面
* 请强持有回调中的 QVNPage 对象,否则会被释放
* @param parentCtl NativeController,作为跳转App的起点,其生命周期必须长于callback回调
* @param pageUrl 页面 URL
* @param callback 调用acquirePage后的回调函数
**/
virtual void STDMETHODCALLTYPE acquirePage(void* parentCtl, const std::string& pageUrl, IVNAcquirePageCallback* callback) = 0;
/**
* 设置当前app的IQVNAppDelegate访问器
**/
virtual void STDMETHODCALLTYPE setDelegate(IQVNAppDelegate* delegate) = 0;
/**
* 获取当前app的IQVNAppDelegate访问器
**/
virtual void STDMETHODCALLTYPE getDelegate(IQVNAppDelegate** pDelegate) = 0;
/**
* 获取当前appinfo
**/
virtual void STDMETHODCALLTYPE getAppInfo(IVNAppInfo **appInfo) = 0;
IQVNPage.h
代码接口:
IQVNPage
/**
* IQVNPage 是业务开发的基本单位,每个 Page 由 vnml/vnss/js/json 来描述
* IQVNPage 暴露接口可以让 Native 开发者直接获取框架渲染成功后的 View;注册该页面特有的 JSApi,设置该页面的安全区等等。
**/
IQVNPage主要接口
/**
* 获取Page的Native View
* @return [Windows GF Implement] 返回的IGFFrame的Reference,外部需要用CComptr进行管理
**/
virtual void* STDMETHODCALLTYPE getView() = 0;
/**
* 获取当前page是否正在显示
* @return true表示正在显示;false表示隐藏
**/
virtual bool STDMETHODCALLTYPE isPageShowing() = 0;
/**
* 调用页面js对象的函数
*
* @param functionName 全局空间函数名
* @param params 函数调用参数,params内参数需要调用者手动释放
* @return 调用结果需要调用者手动释放
**/
virtual IQVNJsValue* STDMETHODCALLTYPE callJsFunction(const char* functionName, const std::vector<IQVNJsValue *> ¶ms) = 0;
/**
* 向页面注入局部可用的JS API接口,注入到 name 指定的空间下。name 可以为 "a.b.c" 的形式。
* 这里的对象会屏蔽掉全局的同名对象,需避免和全局对象同名
* 这个方法应当在得到VNPage对象后的第一时间调用,否则可能无法成功注入。是否注入成功,请通过返回值判断 !!!
*
* @param name 不能为空字符串
* @return true表示注入成功;false表示注入失败
*/
virtual bool STDMETHODCALLTYPE addJavascriptInterface(QVNJSHandlerProtocol * handler, const char* name) = 0;
/**
* 获取当前Page的Context, 外部不可释放
* @ret Page对象对应Context的VN包装
**/
virtual IQVNJsContext * STDMETHODCALLTYPE GetJsContext() = 0;
/**
* 设置page本地代码回调
* @param callback IVNPageNativeCallback回调
**/
virtual void STDMETHODCALLTYPE setVNPageNativeCallback(IVNPageloadInfoCallback * callback) = 0;
/**
* 关闭页面,关闭时会同步回调OnVNPageUnload
* OnVNPageUnload回调时,Page拥有者可以异步清理Page对象,不可以同步清理,会导致消息队列异常
**/
virtual void STDMETHODCALLTYPE close() = 0;
/**
* 获取page路径
**/
virtual std::string STDMETHODCALLTYPE GetPageUrl() = 0;
/**
* 获取page对应vnapp路径
**/
virtual std::string STDMETHODCALLTYPE GetVNAppUrl() = 0;