Skip to content

Método de proxy

Algumas funções do applet precisam ser implementadas no lado nativo a serem chamadas, como encaminhar e obter informações do usuário do aplicativo principal.

Antes de 2.37.13, todos os projetos que adicionamos ao propocolo FATAppletDelegate , então só precisamos definir [FATClient sharedClient].delegate Então então

Após 2.37.13, dividimos o método proxy por função, para que você possa definir o projeto correspondente às suas necessidades. Obviamente, os eventos de procuração da versão antiga também são composições. Eu será respondido.

  • ConfigurationDelegate: Agent for Applet Configuration
  • ButtonOpentypelegate: proxy para diferentes tipos de componente de botão no applet
  • LifeCycleleGate: Proxy for Applet Life Cycle Events
  • Morementlegate: proxy para mais eventos de visualização
  • WaterMaskandScreencapturelegate: proxy para marca d'água e captura de tela, gravação de tela
  • LocalAppletDelegate: Applet Local Related Proxy

Configuração exmple

objectivec
[FATClient sharedClient].buttonOpenTypeDelegate = [FINButtonDelegate sharedHelper];
[FATClient sharedClient].lifeCycleDelegate = [FINLifeCycleDelegate sharedHelper];
[FATClient sharedClient].moreMenuDelegate = [FINMoreMenuDelegate sharedHelper];
[FATClient sharedClient].localAppletDelegate = [FINlocalAppletDelegate sharedHelper];
[FATClient sharedClient].configurationDelegate = [FINConfigurationDelegate sharedHelper];
[FATClient sharedClient].waterMaskAndScreenCaptureDelegate = [FINWaterMaskAndScreenCaptureDelegate sharedHelper];

//[FATClient sharedClient].delegate = [FINDemoClientHelper sharedHelper];(Just set this one before 2.37.13)

1. ConfigurationDelegate

Em FATAppletConfigurationDelegate Estão os eventos de proxy relacionados à configuração do applet.

1.1 Configuração de parâmetros de expansão em escala de cinza

Além dos itens de configuração de escala de cinza padrão fornecidos pelo nosso plotform, você também pode adicionar alguns dados baseados em itens do Grandrol, sobre serem lidos pelos métodos de proxy de footwowing quando o applet dos parâmetros de negócios é aberto.

objectivec
/// Small program grayscale extension parameters
/// @param appletId Applet id
- (NSDictionary *)grayExtensionWithAppletId:(NSString *)appletId;

Exemplo Código:

objectivec
- (NSDictionary *)grayExtensionWithAppletId:(NSString *)appletId
{
    NSDictionary *grayExtension = @{@ "key11" :@ "value1" ,@ "key12" :@ "value2" };
    if ([appletId isEqualToString:@ "5e017a61c21ecf0001343e31" ]) {
        grayExtension = @{@ "fckey1" :@ "fcvalue1" };
    }
    return grayExtension;
}

Em seguida, o SDK solicita a interface de back -end e o passa para o serviço de back -end para corresponder às regras relevantes.

1.2 Configuração de configuração do applet Configuração

Ao inicializar o SDK, você pode definir alguns itens gerais de constfiguração e há cenários em que queremos que uma configuração ITM entre em vigor apenas para um applet de Cameain, para que você possa implementar esse método de proxy. Quando o applet é iniciado, as informações de configuração do O applet será lido nesse método proxy.

objectivec
/// Set configuration items for an applet,Usage scenario: you need to set special configuration items for a specific applet
/// @param appletInfo Applet Information
- (FATAppletConfig *)getConfigWithAppletInfo:(FATAppletInfo *)appletInfo;

Exemplo:

objectivec
- (FATAppletConfig *)getConfigWithAppletInfo:(FATAppletInfo *)appInfo
{
    FATAppletConfig *appletConfig = [[FATAppletConfig alloc] init];
    appletConfig.header = @{@ "userId" :@ "PhizClip18607180143" ,
                            @ "User-Agent" :@ "finogeeks-Agent" 
    };
    if ([appInfo.appId isEqualToString:@ "5e017a61c21ecf0001343e31" ]) {
        appletConfig.hideBackToHomeStatus = FATAppletConfigPositive;
    }

    return appletConfig;
}

Quando o applet estiver em execução, você pode injetar um cookie quando você abrir a página H5, o branco pode ser configurado Vis Project

objectivec
/// Setting cookies for applets
/// @param appletId Applet id
- (NSDictionary *)getCookieWithAppletInfo:(NSString *)appletId;

Exemplo:

objectivec
- (NSDictionary *)getCookieWithAppletInfo:(NSString *)appletId {
    NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
    [cookieProperties setObject:@ "Hm_apvt_0d885a47c55a66238287cbd00b79a117"  forKey:NSHTTPCookieName];
    [cookieProperties setObject:@ "finogeeks"  forKey:NSHTTPCookieValue];
    [cookieProperties setObject:@ ".myqcloud.com"  forKey:NSHTTPCookieDomain];
    [cookieProperties setObject:@ "finogeeks.com"  forKey:NSHTTPCookieOriginURL];
    [cookieProperties setObject:@ "/"  forKey:NSHTTPCookiePath];
    [cookieProperties setObject:@ "0"  forKey:NSHTTPCookieVersion];
    [cookieProperties setObject:[NSDate dateWithTimeIntervalSinceNow:36000] forKey:NSHTTPCookieExpires];
    return cookieProperties;
}

1.4 Verifique JS-Informações de configuração do SDK

Este evento de proxy é acionado quando a configuração é chamada contra JS-SDK para valor. O resultado do valor, sucesso ou falha, precisa ser retornado.

objectivec
/// Verify the js-sdk config information (if the proxy method is not implemented, the verification is passed by default)
/// @param appletInfo Applet Information
/// @param config Verification Information
/// @param completion After the execution of the callback, verification through the code returns FATExtensionCodeSuccess, failure to return FATExtensionCodeFailure
- (void)applet:(FATAppletInfo *)appletInfo onJSSDKConfig:(NSDictionary *)config completion:(void (^)(FATExtensionCode code, NSDictionary *result))completion;

1,5 eventos de gancho H5

Se o aplicativo host usou UrlProtocol para interceptar HTTP ou HTTPS, a solicitação no H5 perderá o corpo e nosso SDK conectará a solicitação para ser compatível com esse problema. Corpo de cada solicitação por si só, e depois Assembll Stom UrlProtocol.

Então, quando uma solicitação de solicitação é feita em H5, integrada ao nosso JS-SDK, este evento de proxy será acionado.

objectivec
/**
 The event will be triggered when the request sent in the applet H5 contains the body
 The requestInfo will contain
 bodyType: the type of the body content
 requestHref: the link that the request is made in the page
 requestId: request id, each request will be constructed, subsequent interception of requests, can be matched in query parameters by PhizClipHookBridge-RequestId
 requestUrl: the address of the request when the request is initiated.
 value: the body content of the request.
 Example
 {
     bodyType = String;
     requestHref =  "http://aaronly.gitee.io/aymj" ;
     requestId = 16499170263357297;
     requestUrl =  "https://www.PhizClip.com/api/v1/mop/mop-fast-trial-manager/web/visits/statistics" ;
     value =  "{\" type\ ":\" download_click\ "}" ;
 };
 */
- (void)applet:(FATAppletInfo *)appletInfo hookRequestInfo:(NSDictionary *)requestInfo;

2. ButtonOpenePypeDelegate

O botão no applet tem uma série de abertos-Tipo de eventos e alguns dos comportamentos precisam ser implementados pelo aplicativo, para que os eventos correspondentes sejam alojados por métodos de proxy

Nó da

2.37.13 O primeiro aberto-Evento de tipo-O método de proxy relacionado não tem valor de retorno

2.1 Compartilhar

Quando aberto-Tipo é compartilhado, o comportamento do gatilho está encaminhando, que é a tarefa como o botão de força no menu mais. Ambos devem causar o applet a outros (por exemplo, IM Room). Portanto, o SDK passará o applet e as informações da página atual Este projeto. Se eles desejarem implementar a função de encaminhamento, basta imaginar este projeto este projeto.

objectivec
/** Forwarding event
 When you click the forward menu in the upper right corner of the applet, or click the Button with the open-type property of share, it will trigger the shareAppMessage method in the applet, and then call back to the native method
 @param contentInfo Applet related information, which includes applet id, applet name, applet icon, applet screenshot (5:4), etc.
 {
    appAvatar =  "applet icon address" ;
    logoImage = UIImage object, only included if local applet and this parameter is set.
    appDescription =  "description information of the applet" ;
    appId =  "applet id" ;
    appInfo = {}; // Customer can customize the fields in appInfo, appInfo content will be passed through
    appStartParams = {
        path =  "The path to the applet page when clicking forward" ;
    };
    appThumbnail =  "Path to the applet cover image, may be network path or local path, aspect ratio is 5:4" ;
    appTitle =  "applet name" ;
    userId =  "applet developer id" ;
}
 @param completion The callback after execution. If you want to inform the applet side of the forwarding result after the forwarding operation is executed, you need to call this block.
 @return Return YES after implementing this method
 Reference link: /develop/component/form.html#button
 */
- (BOOL)forwardAppletWithInfo:(NSDictionary *)contentInfo completion:(void (^)(FATExtensionCode code, NSDictionary *result))completion;

2.2 GetSerinfo

Este projeto é desencadeado quando a API de informações do usuário é chamada (getUserinfo) ou quando o botão com o aberto-Tipo de propriedade getUserinfo é clicado

objectivec
/**
Call the Get User Info API (getUserInfo) or trigger when clicking on a Button with the open-type property getUserInfo
 @param appletInfo applet information
 @param bindGetUserInfo GetUserInfo callback
 @return Returns YES after implementing this method
  The result reference format is as follows (can be customized by the host app).
 {
    nickName =  "nickname" 
    avatarUrl =  "avatar address" 
    gender =  "gender" 
    province =  "province" 
    city =  "city" 
    country =  "country" 
    userId =  "value is [FATClient sharedClient].config.currentUserId"  // added by sdk default
    baseUrl =  "value is appletInfo.apiServer"  //// sdk added by default
*/
- (BOOL)getUserInfoWithAppletInfo:(FATAppletInfo *)appletInfo bindGetUserInfo:(void (^)(NSDictionary *result))bindGetUserInfo;

2.3 Contal

Este evento de proxy é acionado quando aberto-Tipo é contal.

objectivec
/// Button open-type attribute is contact, open customer service session.
/// @param appletInfo applet information
/// @param sessionFrom Session source
/// @param sendMessageTitle The title of the message card within the session
/// @param sendMessagePath The path of the applet to jump to when the message card is clicked within the session
/// @param sendMessageImg In-session message card image
/// @param showMessageCard applet message
/// @return Returns YES after implementing this method
- (BOOL)contactWithAppletInfo:(FATAppletInfo *)appletInfo sessionFrom:(NSString *)sessionFrom sendMessageTitle:(NSString *)sendMessageTitle sendMessagePath:(NSString *)sendMessagePath sendMessageImg:(NSString *)sendMessageImg showMessageCard:(BOOL)showMessageCard;

2.4 getphoneNumber

Este evento de proxy é acionado quando aberto-O tipo é getPhonumber.

objectivec
/// Button open-type property is getPhoneNumber, get user's cell phone number.
/// @param appletInfo phizclip informação
/// @param bindGetPhoneNumber Get user's cell phone number callback
/// @return Returns YES after implementing this method
- (BOOL)getPhoneNumberWithAppletInfo:(FATAppletInfo *)appletInfo bindGetPhoneNumber:(void (^)(NSDictionary *result))bindGetPhoneNumber;

2.5 LaunchApp

Este evento de proxy é acionado quando aberto-Tipo é LaunchApp.

objectivec
/// Button open-type property is launchApp, open APP.
/// @param appletInfo applet information
/// @param appParameter The parameter passed to APP when opening APP
/// @param bindError The callback for opening the APP with an error
/// @param bindLaunchApp Callback for successful opening of the APP
/// @return Returns YES after implementing this method
- (BOOL)launchAppWithAppletInfo:(FATAppletInfo *)appletInfo appParameter:(NSString *)appParameter bindError:(void (^)(NSDictionary *result))bindError bindLaunchApp:(void (^)(NSDictionary *result))bindLaunchApp;

2.6 Feedback

Este método de proxy é acionado quando o aberto-Tipo é feedback. Se o aplicativo não imaginar este projeto, ele abre a página de feedback de reclamação no menu mais.

objectivec
/// Button open-type property is feedback, open the  "Feedback"  page. (When the app is not implemented, the feedback inside the menu bar will be opened)
/// @param appletInfo applet information
/// @return Returns YES after implementing this method
- (BOOL)feedbackWithAppletInfo:(FATAppletInfo *)appletInfo;

2.7 Chooseavatar

O método de proxy é acionado quando aberto-Tipo é ChooseAvatar.

objectivec
/// Button open-type property is chooseAvatar, get user avatar.
/// @param appletInfo applet information
/// @param bindChooseAvatar Get user avatar callback
/// @return Returns YES after implementing this method
- (BOOL)chooseAvatarWithAppletInfo:(FATAppletInfo *)appletInfo bindChooseAvatar:(void (^)(NSDictionary *result))bindChooseAvatar;

3. Lifecyclelegate

Casos de proxy de ciclo de vida de Chengde: Didopen, Didclose, Init, Didactive, ResidNactive, DidFail, Dealloc.

3.1 O evento que o applet abre e completa

objectivec
/**
 The event when the applet is opened
 @param appletInfo appletinfo
 @param error error object
 */
- (void)appletInfo:(FATAppletInfo *)appletInfo didOpenCompletion:(NSError *)error;

3.2 Conclusão de fechamento de applet eovent

objectivec
/**
 The event when the applet is closed
 @param appletInfo appletinfo
 @param error error object
 */
- (void)appletInfo:(FATAppletInfo *)appletInfo didCloseCompletion:(NSError *)error;

3.3 O evento em que a inicialização do applet é concluída e a página inicial é carregada

objectivec
/**
 The event when the applet initialization is completed and the home page is loaded out
 @param appletInfo appletinfo
 @param error error object
 */
- (void)appletInfo:(FATAppletInfo *)appletInfo initCompletion:(NSError *)error;

3.4 Eventos nos quais o applet entra no status ativo

objectivec
/**
 The event that the applet enters the active state
 @param appletInfo appletinfo
 @param error error object
 */
- (void)appletInfo:(FATAppletInfo *)appletInfo didActive:(NSError *)error;

3.5 O evento em que o applet entra no status inativo

objectivec
/**
 Events for applets entering inactive state
 @param appletInfo appletinfo
 @param error error object
 */
- (void)appletInfo:(FATAppletInfo *)appletInfo resignActive:(NSError *)error;

3.6 Eventos de erro de applet

objectivec
/**
 Events for applet errors
 @param appletInfo appletinfo
 @param error error object
 */
- (void)appletInfo:(FATAppletInfo *)appletInfo didFail:(NSError *)error;

3.7 O evento que o applet foi destruído

objectivec
/**
 The event that the applet is destroyed
 @param appletInfo appletinfo
 @param error error object
 */
- (void)appletInfo:(FATAppletInfo *)appletInfo dealloc:(NSError *)error;

4.MoremenudElegate

Eventos de proxy relacionados ao painel mais visualizações. Esses métodos de proxy permitem a personalização de mais visualizações ou personalizando o menu ITMS em mais visualizações.

4.1 No canto superior direito da cápsula [...] O evento de clique

Você pode exibir mais visualizações de seu próprio design neste evento, retornar sim, significa que você deseja personalizar mais visualizações do YourSseld; Ans não personalizam mais visualizações.

objectivec
/**
 In the upper-right corner of the capsule [...] event, you can pop up more views of your own design in that event.
 So if you implement this proxy event, the following two custom menu events will not be triggered
 @param appletInfo applet information
 @path applet page path, example: pages/index/index
 */
- (BOOL)appletInfo:(FATAppletInfo *)appletInfo didClickMoreBtnAtPath:(NSString *)path;

4.1 Personalize o método proxy para itens de menu em mais visualizações

O menu personalizado no botão mais chamará a API para obter a fonte de dados do menu personalizado, a porta do menu na página

objectivec
/**
 The custom menu in the more button will call the api when the menu pops up on the page
 @param appletInfo applet information
 @param path page path
 */
- (NSArray<id<FATAppletMenuProtocol>> *)customMenusInApplet:(FATAppletInfo *)appletInfo atPath:(NSString *)path;

4.1 Eventos que são acionados quando um menu Cusom

objectivec
/**
 Events that will be triggered when clicking on the custom menu (new version)
 The [-clickCustomItemMenuWithInfo:completion:] will be triggered only if this proxy method is implemented
 @param contentInfo Share information
 @param appletInfo applet information
 @param completion Share callback (applet share callback: 1. [code] callback status code; 2. [result] callback information passed back to the applet)
 */
- (void)clickCustomItemMenuWithInfo:(NSDictionary *)contentInfo inApplet:(FATAppletInfo *)appletInfo completion:(void (^)(FATExtensionCode code, NSDictionary *result))completion;

5. waterMaskAndScreenCaptureDelegate tela de gravação, captura de tela, evento de marca d'água

5.1 Evento do agente de gravação de applet

objectivec
/// Screen recording event callback
/// @param appletInfo The applet that was running at the time of the screen recording event
/// @param isCapture whether the screen is being recorded or not
/// @param pagePath The path to the applet's current page at the time of the screen recording event
- (void)applet:(FATAppletInfo *)appletInfo screenCaptureStatusChanged:(BOOL)isCapture atPagePath:(NSString *)pagePath;

5.2 Evento de proxy da captura de tela de applet

objectivec
/// Screenshot event callback
/// @param appletInfo The applet currently running at the time of screenshot
/// @param pagePath The path to the applet's current page at the time of screenshot
- (void)appletDidTakeScreenshot:(FATAppletInfo *)appletInfo atPagePath:(NSString *)pagePath;

5.3 Evento de agente de marca d'água de pequeno programa

Esse método de processo será chamado quando a página será exibida. Se você deseja adicionar uma marca d'água à página, basta desenhar o conteúdo no contêiner da marca de água VI ew aqui.

objectivec
/// Custom add watermark
/// @param appletInfo applet information
/// @param watermaskView watermark container view, you can add watermark content such as text or images in this view
- (void)applet:(FATAppletInfo *)appletInfo customizeWatermarkView:(UIView *)watermaskView;

6. LOCALAPPletDelegate

Appleto local aberto-Eventos relacionados

6.1 Eventos de proxy para applets locais para abrir outros applets

Como o applet local é configurado pelo aplicativo, quando o Navigatetominiprogram é chamado no applet local, o método proxy será acionado e o aplicativo op. Em outros applets.

objectivec
/**
 Triggers a request event to open other local applets
 This event will only be triggered by offline applets.
 @param appletInfo applet object
 @param request The applet request object, which should be used directly and not create a new object.
 @param currentVC The top-level view controller of the current applet
 @param completion The callback when the applet is opened
 */
- (void)applet:(FATAppletInfo *)appletInfo
    navigateToMiniProgram:(FATLocalAppletRequest *)request
                currentVC:(UIViewController *)currentVC
               completion:(void (^)(FATExtensionCode code, NSDictionary *result))completion;

6.2 Eventos de proxy para applets locais para obter o caminho da subpackagem zip

O applet local também contém sub-Appletos de pacote. Desde parte do submarino-Os pacotes são acionados quando o applet desencadeia a lógica do salto, o método proxy será acionado quando o applet pular para um sub -carregado-Pacote, e o aplicativo imaginará o processo de projeto para obter o submarino-Pacote.

objectivec
/**
 Local applet gets zip subpackage path from host app (applicable to applet subpackage loading, applet subpackage loading must be realized)
 If there are multiple applet sub-packages in the app package, to avoid the zip sub-packages with the same name, you can put different applet sub-packages in different folders and introduce them by creating folder references.
 and introduce them by creating folder references, and get them in the code by folder name/subpackage name.zip
 @param appletInfo applet information
 @param packDict Package information
 @param zipPathCallback zipPathCallback(nil) is called when the path fails.
 */
- (void)localApplet:(FATAppletInfo *)appletInfo packDict:(NSDictionary *)packDict zipPathCallback:(void (^)(NSString *zipPath))zipPathCallback;

6.3 Eventos de proxy para getAccountInfosync

Como as informações do applet do applet local são mantidas pelo aplicativo, quando o pz.getAccountInfosync é chamado dentro do applet local, esse evento de procuração será utilizado e as informações da conta corrente precisam ser de forma síncrona.

objectivec
/// Get local applet account information
/// @brief Get local applet account information, returned information structure:
/// @{
//// @ "miniProgram" : @{
/// @ "appId" : ##miniProgram appId##,
//// @ "envVersion" : ##miniProgram version##,
/// @ "version" : ##online applet version number##
/// },
/// @ "plugin" : @{
/// @ "appId" : ##Plugin appId##,
/// @ "version" : ## plugin version number##
/// }
/// }
/// @param appletInfo applet information
/// @return applet account information
- (NSDictionary *)localAppletAccountInfo:(FATAppletInfo *)appletInfo;