Skip to content

Integração da área de trabalho

Integração do código de amostra

O código de amostra de integração está disponível aqui https://github.com/finogeeks/PhizClip-desktop-demo

Se o seu ambiente não tem acesso ao Github, você também pode visitar o repositório espelhado no gitee clicando aqui

1. Obtenha credenciais de applet

Para utilizar o SDK, é necessário solicitar a SDK KEY e SDK SECRET. Somente se as corretas SDK KEY e SDK SECRET forem configuradas durante a inicialização do SDK é que ele funcionará.

1.1 Criando aplicativos

Usuários registrados precisam fazer login em "Gerenciamento de Aplicativos - Novo Aplicativo Parceiro" para concluir a criação da aplicação

Image.png

1.2 Obtendo a chave SDK e o SDK Secret

Após criar a aplicação e adicionar o Bundle ID, se precisar exportar a SDK KEY e SDK SECRET correspondentes, por favor, selecione 'Copiar' após o Bundle ID correspondente, e você pode colar usando Ctrl+V ou Command+V;

Image.png Os quais:

  • SDK KEY: É a credencial para a aplicação parceira poder utilizar o SDK do applet. Se a verificação da SDK Key falhar, todas as APIs do SDK estarão indisponíveis.
  • SDK SECRET: é um certificado de segurança para acessar o serviço. Não compartilhe com terceiros

Nota

Detalhes sobre a criação de aplicativos e obtenção de SDK KEY e SDK SECRET podem ser encontrados em 「Introdução-Guia de Operação-Guia de Operação Empresarial-7」

2. Obter e importar o SDK

A estrutura de diretórios da versão desktop do SDK é a seguinte:

PhizClip.zip
│ PhizClipWrapper.(dll | so | dylib)   # Dynamic Link Library
│ PhizClip_api.h                       # Public interface header file
│ PhizClip_const.h 
└───PhizClip/                          # Main program

2.1 Importando o SDK

Dependendo da combinação de linguagem e builder, o método de importação varia ligeiramente

:::: tabs :options="{useUrlFragment:false}" ::: tab "cmake"

cmake
 target_include_directories(TARGET PRIVATE ${PhizClip_DIR})
 target_link_libraries(TARGET PRIVATE PhizClipSDKWrapper)

::: ::: tab "qmake"

qmake
 LIBS += "path/to/PhizClipSDKWrapper.lib"
 INCLUDEPATH += "path/to/include"

::: ::: tab "js"

javascript
const PhizClip = require('./build/Release/_PhizClip.node');

::: ::: tab "rust"

rust
// build.rs
fn main() {
 println!("cargo:rustc-link-lib=dylib=PhizClipSDKWrapper");
 println!("cargo:rustc-link-search=native=/path/to/libPhizClipSDKWrapper.so");
}

::: ::::

3. Inicialização do SDK

3.1 Configurando o SDK

:::: tabs :options="{useUrlFragment:false}" ::: tab "C++"

cpp
 auto *factory = PhizClip_get_packer_factory();
 auto *packer = PhizClip_packer_factory_get_config_packer(factory);
 PhizClip_initialize(packer);
 PhizClipParams *config = PhizClip_create_params();
 PhizClip_params_set(config, PhizClip_CONFIG_APPSTORE, app_store);
 PhizClip_params_set(config, PhizClip_CONFIG_APPKEY, appkey.c_str());
 PhizClip_params_set(config, PhizClip_CONFIG_SECRET, secret.c_str());
 PhizClip_params_set(config, PhizClip_CONFIG_DOMAIN, domain.c_str());
 PhizClip_params_set(config, PhizClip_CONFIG_EXE_PATH, exe_path.c_str());

::: ::: tab "js"

javascript
PhizClip.setDomain('PhizClip_CONFIG_DOMAIN');
PhizClip.setAppkey('PhizClip_CONFIG_APPKEY');
PhizClip.setAppid('PhizClip_CONFIG_APPID');
PhizClip.setSecret('PhizClip_CONFIG_SECRET');

::: ::: tab "rust"

rust
let factory = PhizClip_get_packer_factory();
let packer = PhizClip_packer_factory_get_config_packer(factory);
PhizClip_initialize(packer);
let config = PhizClip_create_params();
PhizClip_params_set(config, cstr("appstore").as_ptr(), cstr(&cfg.appstore).as_ptr());
PhizClip_params_set(config, cstr("appkey").as_ptr(), cstr(&cfg.appkey).as_ptr());
PhizClip_params_set(config, cstr("secret").as_ptr(), cstr(&cfg.secret).as_ptr());
PhizClip_params_set(config, cstr("domain").as_ptr(), cstr(&cfg.domain).as_ptr());
PhizClip_params_set(config, cstr("app_id").as_ptr(), cstr(&cfg.appid).as_ptr());
PhizClip_params_set(config, cstr("exe_path").as_ptr(), cstr(&cfg.exe_path).as_ptr());
PhizClip_config_packer_add_config(packer, config);
PhizClip_start_applet(cstr(&cfg.appstore).as_ptr(), cstr(& cfg.appid).as_ptr());

::: ::::

4. Exemplos de uso do SDK

4.1 Lançando o applet

:::: tabs :options="{useUrlFragment:false}" ::: tab "C++"

cpp
 PhizClip_start_applet(app_store, appid.c_str());

::: ::: tab "js"

javascript
const result = PhizClip.start({
 handle: 0,
 PhizClipPath: 'PhizClip_PATH',
});

::: ::: tab "rust"

rust
PhizClip_start_applet(cstr(& cfg.appstore).as_ptr(), cstr(&cfg.appid).as_ptr())

::: ::::

4.2 Incorporando applets

:::: tabs :options="{useUrlFragment:false}" ::: tab "C++"

cpp
 PhizClip_start_applet_embed(app_store, appid.c_str(), hwnd);

::: ::: tab "rust"

rust
PhizClip_start_applet_embed(cstr(& cfg.appstore).as_ptr(), cstr(&cfg.appid).as_ptr(), hwnd)

::: ::::

4.3 Registrando API personalizada

:::: tabs :options="{useUrlFragment:false}" ::: tab "C++"

cpp
// Define custom APIs
void WebApiExample(const char *event, const char *param, void *input,
 void *res) {
 auto *self = static_cast< MainWindow *>(input);
 PhizClip_params_set(res, "hello", "web api");
}
void AppApiExample(const char *event, const char *param, void *input,
 void *res) {
 auto *self = static_cast< MainWindow *>(input);
 PhizClip_params_set(res, "hello", "app api");
}
// Register custom APIs
 fin_register_api(packer, kWebView, "test", WebApiExample, this);
 fin_register_api(packer, kApplet, "test", AppApiExample, this);

::: ::: tab "rust"

rust
// Define custom APIs
extern "C" fn web_api_callback(res: *const c_char, input: *mut c_void) 
{
 unsafe {
 let data = &*(input as *mut Arc< Mutex< OtherStruct>>);
 let mut d = data.lock().unwrap();
 d. set_value("callback ok!");
 }
}
extern "C" fn web_api_example(event: *const c_char,
 param: *const c_char, input: *mut c_void, _res: *mut c_void) {
 unsafe {
 let data = &*(input as *mut Arc< Mutex< OtherStruct>>);
 let mut d = data. lock().unwrap();
 d. set_value("web api ok!");
 }
}
// Register custom APIs
let other_struct_obj: Arc< Mutex< OtherStruct>>;
let input = & other_struct_obj as *const _ as *mut c_void;
PhizClip_register_api(packer, typ as c_int, str_to_cstr(apis)?as_ptr(),
web_api_example, input);
// call api, only the host can call the api in the webview
let other_struct_obj: Arc< Mutex< OtherStruct>>;
let input = & other_struct_obj as *const _ as *mut c_void;
let res = PhizClip_invoke_api(PhizClipApiType::WebView, appid.as_str(), 
"test", r###"{"hello": "world"}"####, web_api_callback, input);

::: ::::