Skip to content

API/ personalização de componentes

Se o applet precisar chamar alguns recursos fornecidos pelo aplicativo host, e o applet sdk phizdclip não é implementado ou não pode ser realizado, ele Pode ser aplicado ao registrar uma API personalizada, para que o applet possa Ligue também a API registrada no aplicativo. Obviamente, você também pode registrar componentes personalizados quando quiser usar Componentes que estão implementados ou não podem ser implementados. Existem dois cenários para registrar uma API personalizada:

  1. Registrar APIs personalizadas para applets nativos para usar;
  2. Registre a API personalizada usada por H5 carregado pelo componente WebView em O applet.

1. Personalize a API do Applet

Existem quatro etapas para se registrar e usar a API de applet personalizada:

  • Implementar uma API personalizada
    1. Registre APIs personalizadas
    1. Declare a API personalizada na configuração do applet
    1. Chamando API personalizada no applet

1.1 Registrando uma API assíncrona personalizada

  1. Implementar uma API assíncrona personalizada.
Implementação de um exemplo de API assíncrono personalizado
java
public class CustomApi extends BaseApi {
Public CustomApi Context (Context) {
Super (context);
}
@ Override
Public String [] apis () {

Return a new String [] {}  "customEvent" ; / / API names
}
@ Override
public void invoke(String event, JSONObject param, ICallback callback) 
{
// what happens natively when the method is called
}
}
  1. Registre -o no 'ExtensionApImanager', apoiando solteiro e Registros em massa. Register a single custom api :::: tabs ::: tab "Kotlin"
kotlin
FinAppClient.extensionApiManager.registerApi(CustomApi(this))

:::

::: tab "Java"

java
FinAppClient.INSTANCE.getExtensionApiManager().registerApi(new 
CustomApi(this));

:::: Bulk registration of custom apis :::: tabs ::: tab "Kotlin"

kotlin
val apis = listOf<IApi>(CustomApi1(), CustomApi2(), CustomApi3())
FinAppClient.extensionApiManager.registerApis(apis)

:::

::: tab "Java"

java
List<IApi> apis = new ArrayList<>();

IApi customApi1 = new CustomApi1();
apis.add(customApi1);

IApi customApi2 = new CustomApi2();
apis.add(customApi2);

IApi customApi3 = new CustomApi3();
apis.add(customApi3);

FinAppClient.INSTANCE.getExtensionApiManager().registerApis(apis);

:::: 3) Declare a API personalizada no arquivo de configuração do applet. Crie 'phizdclipconf.js' na raiz do applet ou use pz.loadextapi para configurar seu costume API de acordo

js
module.exports = {
ExtApi:
{// normal interactive API
name: 'PhizClipLogin', // Extension api name This api must be natively 
implemented
sync: false, // If this is a sync api
params: {// Extend the api parameter format to list only the required 
attributes
Url: "'
}
},
{
Name: 'PhizClipTestSync',
sync: true, // Whether this is a synchronous api
Params: {
Name: "',
Title: "'
}
}
]
}

Para obter informações de configuração de API mais personalizadas, consulte pz.loadExtApi 4) Chame a API assíncrona do pequeno programa personalizado

js
pz.PhizClipLogin({
Url:  "https://www.baidu.com" ,

Success: the function (res) {
console.log( " Call customEvent success" );
The console. The log (res);
},
Fail: function (res) {
console.log( " Calling customEvent fail" );
The console. The log (res);
}
});

1.2 Inscreva -se para uma API de sincronização de applet personalizada

APIs síncronas são APIs personalizadas que retornam os resultados de forma síncrona quando Chamado.

Nota: as APIs personalizadas precisam herdar de Syncapi e substituir o Invoke Method Returnet por sincronização. A API de sincronização deve ser registrada no processo de applet para ele trabalhar

  1. Implementar uma API assíncrona personalizada.
java
public class CustomApi extends SyncApi {
Public CustomApi Context (Context) {
Super (context);
}
@ Override
Public String [] apis () {
Return a new String [] {}  "customApi" ;
}
@ Nullable
@ Override
public String invoke(String event, JSONObject param) {
return getSuccessRes(event).put( "data" , "1" ).toString(); 
}

}
  1. Registre -o no 'ExtensionApImanager', apoiando solteiro e Registros em massa. Register a single custom api :::: tabs ::: tab "Kotlin"
kotlin
FinAppClient.extensionApiManager.registerApi(CustomApi(this))

:::

::: tab "Java"

java
FinAppClient.INSTANCE.getExtensionApiManager().registerApi(new 
CustomApi(this));

:::: Bulk registration of custom apis :::: tabs ::: tab "Kotlin"

kotlin
val apis = listOf<IApi>(CustomApi1(), CustomApi2(), CustomApi3())
FinAppClient.extensionApiManager.registerApis(apis)

:::

::: tab "Java"

java
List<IApi> apis = new ArrayList<>();

IApi customApi1 = new CustomApi1();
apis.add(customApi1);

IApi customApi2 = new CustomApi2();
apis.add(customApi2);

IApi customApi3 = new CustomApi3();
apis.add(customApi3);

FinAppClient.INSTANCE.getExtensionApiManager().registerApis(apis);

:::: 3) Declare a API personalizada no arquivo de configuração do applet. Crie 'phizdclipconf.js' na raiz do applet ou use pz.loadextapi para configurar seu costume API Accountingly,

Mais informações pz.loadExtApi

js
module.exports = {
ExtApi:
{// normal interactive API
name: 'PhizClipLogin', // Extension api name This api must be natively 
implemented
sync: false, // If this is a sync api
params: {// Extend the api parameter format to list only the required 
attributes
Url: "'
}
},
{
Name: 'PhizClipTestSync',
sync: true, // Whether this is a synchronous api
Params: {
Name: "',
Title: "'
}
}
]
}
  1. Ligue para o pequeno programa
js
const res = pz.PhizClipTestSync({'name':' PhizClip', 'title':'PhizClip'});
console.log(res.title);

1.3 UNCISTER A API APPLT

Apoie os desregração indulgente e a granel. personalizado Unregistering an api

Exemplo de chamada

:::: tabs

::: tab "Kotlin"

kotlin
FinAppClient.extensionApiManager.unregisterApi(customApi)

:::

::: tab "Java"

java
FinAppClient.INSTANCE.getExtensionApiManager().unregisterApi(customApi)

:::: api for bulk unregistration

Exemplo de chamada

:::: tabs ::: tab "Kotlin"

kotlin
FinAppClient.extensionApiManager.unregisterApis(apis)

:::

::: tab "Java"

java
FinAppClient.INSTANCE.getExtensionApiManager().unregisterApis(apis);

::::

1.4 Obtenha todas as APIs de applet personalizadas registradas

API

kotlin
/ * *
* Get all registered applet apis
* /
fun getRegisteredApis(): Map<String, IApi>

Exemplo de chamada

:::: tabs ::: tab "Kotlin"

kotlin
val apis = FinAppClient.extensionApiManager.getRegisteredApis()

:::

::: tab "Java"

java
Map<String, IApi> apis = 
FinAppClient.INSTANCE.getExtensionApiManager().getRegisteredApis();

::::

2. APIs de componentes da WebView personalizados

Se o H5 carregado no applet também quiser usar uma capacidade do API do host, ele pode usar esse método para registrar uma API. Atualmente, o registro de APIs assíncronas é suportado. Existem três etapas para registrar uma API WebView personalizada e usar a API da WebView:

  • Implementar uma API personalizada
    1. Registre APIs personalizadas.
    1. Custom API chama em H5.

2.1 Registrando a API do componente da WebView

  1. Implementar uma API personalizada.
Exemplo de API personalizada
java
public class WebApi extends BaseApi {
Public WebApi Context (Context) {
Super (context);
}
@ Override
Public String [] apis () {
Return a new String [] {}  "webApiName" ; / / API names
}
@ Override
public void invoke(String event, JSONObject param, ICallback callback) 
{
// what happens natively when the method is called
}
}
  1. Registre -o no 'ExtensionWebapimanager', apoiando ambos E registros em massa. Register a single custom api :::: tabs ::: tab "Kotlin"
kotlin
FinAppClient.extensionWebApiManager.registerApi(WebApi(this))

:::

::: tab "Java"

java
FinAppClient.INSTANCE.getExtensionWebApiManager().registerApi(new 
WebApi(this));

:::: Bulk registration of custom apis :::: tabs ::: tab "Kotlin"

kotlin
val apis = listOf<IApi>(WebApi1(), WebApi2(), WebApi3())
FinAppClient.extensionWebApiManager.registerApis(apis)

:::

::: tab "Java"

java
List<IApi> apis = new ArrayList<>();

IApi webApi1 = new WebApi1();
apis.add(webApi1);

IApi webApi2 = new WebApi2();
apis.add(webApi2);

IApi webApi3 = new WebApi3();
apis.add(webApi3);

FinAppClient.INSTANCE.getExtensionWebApiManager().registerApis(apis);

:::: 3) Chamando a API personalizada dentro do H5 Dentro da referência H5, nossa ponte JSSDK Arquivos, você pode ligar para o método sobre o registro. Exemplo de método de chamada de registro em html:

javascript
window.pz.miniProgram.callNativeAPI('js2AppFunction', 
{name:'getLocation'}, (result) => {
The console. The log (result)
});

2.2 Descongelando a API do componente da WebView

Apoie os desregração indulgente e a granel. Cancel a single WebView component API

Exemplo de chamada

:::: tabs ::: tab "Kotlin"

kotlin
FinAppClient.extensionWebApiManager.unregisterApi(webApi)

:::

::: tab "Java"

java
FinAppClient.INSTANCE.getExtensionWebApiManager().unregisterApi(webApi)

:::: Canceling WebView component apis in bulk :::: tabs ::: tab "Kotlin"

kotlin
FinAppClient.extensionWebApiManager.unregisterApis(webApis)

:::

::: tab "Java"

java
FinAppClient.INSTANCE.getExtensionWebApiManager().unregisterApis(webApi
s);

::::

2.3 Obtenha todas as APIs do WebView Applet registrado

API

kotlin
/ * *
* Get native API calls from all registered web pages
* /
fun getRegisteredApis(): Map<String, IApi>

Exemplo de chamada

:::: tabs ::: tab "Kotlin"

kotlin
val apis = FinAppClient.extensionWebApiManager.getRegisteredApis()

:::

::: tab "Java"

java
Map<String, IApi> apis = 
FinAppClient.INSTANCE.getExtensionWebApiManager().getRegisteredApis();

::::

3. Registre a API no processo de applet

Normalmente a API registrada no applet é chamada e executada em o principal processo. Quando há uma API que precisa ser executada no Processo de applet, outra interface precisa ser registrada.

kotlin

FinAppProcessClient.callback = object : FinAppProcessClient.Callback {
override fun getRegisterExtensionApis(activity: Activity): List<IApi>? 
{
// Register the applet extension API in the applet process
Return listOf (CustomApi (activity))
}
Override fun getRegisterExtensionWebApis (activity: the activity) : 
List < IApi >? {
// Register applet webpage to call native API in applet process
Return listOf (CustomH5Api (activity))
}
}

4. Chamadas de API JS nativas

API

kotlin
/ * *
* Calling JS functions natively
*
* @param appId applet id
* @param funcName JS function name
* @param funcParams JS function arguments
* @param webViewId The id of the WebView
* @param callback
* /
fun callJS(appId: String, funcName: String?, funcParams: String?, 
webViewId: Int, callback: FinCallback<String?>)

Exemplo de chamada

:::: tabs ::: tab "Kotlin"

kotlin
FinAppClient.appletApiManager.callJS(
"AppId",
"FuncName,"
"FunParams."
1,
Object: FinCallback < String?> {

Override fun onSuccess (result: String? {
Log.d(TAG, "callJS onSuccess: $result")
}
override fun onError(code: Int, error: String?) {
Log.d(TAG, "callJS onError: $code:, $error")
}
override fun onProgress(status: Int, info: String?) {
}
})

:::

::: tab "Java"

java
FinAppClient.INSTANCE.getAppletApiManager().callJS(
"AppId",
"FuncName,"
"FunParams."
1,
New FinCallback < String > () {
@ Override
public void onSuccess(String result) {
Log.d(TAG, "callJS onSuccess: "+ result);
}
@ Override
public void onError(int code, String error) {
The d (TAG, "callJS onError:" + code + ", "+ error);
}
@ Override
public void onProgress(int status, String info) {
}
});

:::: Primeiro, na referência H5, nossa ponte JSSDK Arquivos.

Em seguida, registre o método no HTML, diga que é chamado 'App2jsfunction'.

javascript
window.pz.registNativeAPIHandler('app2jsFunction', 
function(res) {
/ / app2jsFunction callback
})

5. Registre componentes nativos

Componentes nativos como LivePusher e LivePlayer podem precisar de externo terceiro-Controles da parte devido a recursos limitados. É aqui que você pode registrar componentes nativos. Agora temos componentes nativos que Registro de suporte: Câmera, LivePlayer, LivePusher.

5.1 Implementando componentes nativos personalizados

Implement the INativeView interface

amostra

kotlin
class TestNativeView : INativeView {
Lateinit var eventChannel: INativeView eventChannel
/ * *
* create nativeview
* @param params arguments passed from the applet
* @param eventChannel is used to send events to the applet component
* @return The view will be filled in where the component is declared in 
the applet
* /
Override fun onCreateView (
Context: context,
Params: ShowNativeViewParams.
The eventChannel: INativeView eventChannel
) : the View {
The d (TAG,  "onCreateView: ${params. NativeViewId}" )
Enclosing the eventChannel = eventChannel
Return TextView (context). Apply {
Gravity = gravity CENTER
SetTextColor (Color RED)

Text = params. Params. ToString ()
SetBackgroundColor (Color. GREEN)
SetOnClickListener {
The eventChannel. Send (
 "Test" ,
MapOf ( " time " to System. CurrentTimeMillis ())
)
}
}
}
/ * *
* update nativeview
* @param params arguments passed from the applet
* @param view The previously created view
* /
override fun onUpdateView(context: Context, params: 
ShowNativeViewParams, view: View) {
The d (TAG,  "onUpdateView: ${params. NativeViewId}" )
Params. Params?.let { (view as TextView).text = it.toString() }
}
/ * *
* destroy nativeview
* @param params arguments passed from the applet
* @param view The previously created view
* /
override fun onDestroyView(context: Context, nativeViewId: String, 
view: View) {
The d (TAG,  "onDestroyView: $nativeViewId" )
}

}

5.2 Registro componentes nativos

API
kotlin
/ **
* Register native components
*
* @param type Component type

* @param cls component implementation class must implement the 
INativeView interface
* /
fun registerNativeView(type: String, cls: Class<out INativeView>)
Exemplo de chamada
Kotlin
kotlin
FinAppClient.nativeViewManager.registerNativeView( "video" , 
TestNativeView::class.java)