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

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;
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 program2.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"
target_include_directories(TARGET PRIVATE ${PhizClip_DIR})
target_link_libraries(TARGET PRIVATE PhizClipSDKWrapper)::: ::: tab "qmake"
LIBS += "path/to/PhizClipSDKWrapper.lib"
INCLUDEPATH += "path/to/include"::: ::: tab "js"
const PhizClip = require('./build/Release/_PhizClip.node');::: ::: tab "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++"
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"
PhizClip.setDomain('PhizClip_CONFIG_DOMAIN');
PhizClip.setAppkey('PhizClip_CONFIG_APPKEY');
PhizClip.setAppid('PhizClip_CONFIG_APPID');
PhizClip.setSecret('PhizClip_CONFIG_SECRET');::: ::: tab "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++"
PhizClip_start_applet(app_store, appid.c_str());::: ::: tab "js"
const result = PhizClip.start({
handle: 0,
PhizClipPath: 'PhizClip_PATH',
});::: ::: tab "rust"
PhizClip_start_applet(cstr(& cfg.appstore).as_ptr(), cstr(&cfg.appid).as_ptr())::: ::::
4.2 Incorporando applets
:::: tabs :options="{useUrlFragment:false}" ::: tab "C++"
PhizClip_start_applet_embed(app_store, appid.c_str(), hwnd);::: ::: tab "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++"
// 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"
// 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);::: ::::