iOS freqüentemente fazia perguntas
1. Perguntas frequentes ao integrar
1.1 Qual é a configuração mínima para o SDK de integração?
R: Philip applet sdk suppopos 9 e acima, as versões do sistema abaixo do iOS 9 não são suporte.
1.2 é o suporte do código de bits?
R: As versões antes do 2.34.5 não são suporte, mas após o 2.34.5 (incluindo 2.34.5) são suportadas.
1.3 O que devo fazer se o projeto relatar um erro e não conseguir encontrar um método de categoria?
R: Isso é antes de não haver configuração -ObjC , Há CATogery criado no SDK, você precisa adicionar -ObjC em Other Linker Flags em Build Setting Então então
1.4 Quais são os parâmetros que devem ser configurados ao inicializar o SDK?
R: Quando a versão SDK é inferior a 2,34.1, appSecret ,, appKey ,, apiServer ,, apiPrefix São obrigatórios; quando a versão SDK é superior a 2,34.1 (incluindo 2.34.1), fizemos algumas opções, então appSecret ,, appKey ,, apiServer São mandáticos. AppKey , Apiserver` are mandatory.
FATStoreConfig *storeConfig = [[FATStoreConfig alloc] init];
storeConfig.sdkKey = @ " The SDK Key that is filled in here " ;
sdkSecret = @ " Fill in SDK secret here " ;
storeConfig.apiServer = @ " Fill in your server address here " ; // example :https://api.PhizClip.com;
storeConfig.apiPrefix = @ "/api/v1/mop" ; // apiPrefix is not required above
FATConfig *config = [FATConfig configWithStoreConfigs:@[storeConfig]];
[[FATClient sharedClient] initWithConfig:config error:nil];In addition, if CurrentUserID is configured, the data will be cached in this directory to facilitate loading data under different accounts when switching between multiple accounts.
1.5 Why does the registered custom applet API not work?
A: When registering a custom API, it will determine whether the current applet SDK has been initialized successfully. If it is not initialized successfully, then the registration of custom Api will not be successful.
Therefore, before registering the custom API, make sure the applet has been initialized successfully.
1.6 Does the applet support horizontal and vertical screen switching or forced horizontal screen?
A: Support.
If you want the applet to support horizontal and vertical screen switching, you need to check Portrait, Landscape Left and Landscape Right in [General] -> [Deployment Info] -> Device Orientation] of iOS project first.
Then, configure [pageOrientation] in the window of the applet's app.json, with optional values: auto / portrait / landscape.
Alternatively, [pageOrientation] can be set separately in the corresponding json configuration of the page.
If it is an iPad, you need to set resizable in app.json if you want to allow the device to support landscape and portrait.
1.7 How can I configure the number of applets to be updated by the SDK batch?
A: There is a property appletIntervalUpdateLimit in FATConfig, the value defaults to 3. That is, when the background automatically checks the version of the car, only the three most recently used applets will be detected. When initializing the SDK, you can modify the appletIntervalUpdateLimit to take a value in the range of 0~50.
1.8 How to try the major version of the SDK?
A: There are some features that are afraid of affecting existing modules, so we put them in the major version of the SDK. If you need this part of the functionality, you can integrate majorSDK in advance to try or develop your own applets in advance.
Major versions of the SDK may contain features that have not been fully tested and are not very stable. There are also two ways to experience the major version of the SDK: manual integration and pod integration.
Manual integration is the same as the manual integration process of the official version, which is to download the SDK, put it into the project, modify the project configuration, etc., so I won't go over it here.
The pod integration is here to focus on! Since the major version is not very stable, it cannot be uploaded to cocoapods source, so we upload the major version sdk to our own repository source. The integration steps are as follows.
1. Add Vantel Warehouse Source
source 'https://git.finogeeks.com/cocoapods/FinPods'Note that if the cocoapods source was not added to the previous podfile, you need to add it.
# Just choose one of these two to add according to your actual situation
source 'https://github.com/CocoaPods/Specs.git'
source 'https://cdn.cocoapods.org/'2.Specify the version of the SDK in the podfile
pod 'FinApplet', '2.37.0-alpha20220416v03'
pod 'FinAppletExt', '2.37.0-alpha20220416v03'3.pod install Just install the dependencies, or Atualização de pod Para atualizá -los.
2. Perguntas frequentes ao usar
2.1 Como iniciar o applet?
A: Basta chamar a seguinte API.
[[FATClient sharedClient] startRemoteApplet:appId startParams:startParams InParentViewController:viewController completion:^(BOOL result, NSError *error) {
NSLog(@ "result:%d---error:%@" , result, error);
}];2.2 Existem códigos de erro comuns e solução de problemas ao abrir pequenos programas?
R: As dicas comuns para abrir a falha do applet são as seguintes 8.
- Appid ou AppTital é nulo. Isso ocorre porque o Appid não foi configurado quando o applet foi iniciado, ou o nome do applet não foi configurado. As informações básicas do applet foram editadas em segundo plano.
- Copyresources arquivados isso é porque movendo os dobrados
applet packageordenadobase library packagePara a corrida, o diretório falhou, principalmente porque há um problema com o compiladoapplet zippacote oubase library zipPacote. Isso é antesservice.htmlestá faltando no compiladoapplet zipPacote, que pode ser causado por um poplem com o compiladoapplet zipPacote. Isso é antes do downloadapplet zipFalhou em mudar para o diretório de cache, o que raramente acontece. - Exceção de serviço, obtenha detalhes do applet falhado.
apiPrefixEstá configurado corretamenteapi/v1/mopEntão então - A colorração Ben terminou. Nesse caso, são usuários, o back -end do administrador encerrou a cooperação com o aplicativo (o coto de pão correspondente.
- O serviço não está disponível. Nesse caso, geralmente o applet ainda não está associado ao aplicativo, ou há um prrablem em segundo plano.
- ABNORMAL DE SERVIÇO, Retorno Detalhes de dados anormais. Nesse caso, geralmente é porque o serviço de fundo está ingg, resultando nos dados retornados fa ormat não é líder.
2.3 Como adicionar a função de compartilhamento do Phiz para pequenos programas?
R: Existem 2 cenários principais aqui da seguinte forma:
- Modifique a função de formação no compartilhamento do Phiz.
- Personalize a interface de compartilhamento do Phiz e ligue para a interface de compartilhamento Phiz personalizada no applet.
2.3.1 Altere a função de encaminhamento para o compartilhamento do Phiz
O Philip Applet SDK passa os eventos de encaminhamento por meio de um proxy, então tudo o que é necessário é definir um objeto Foror [FATClient sharedClient].buttonOpenTypeDelegate Isso implementa.
Em seguida, será um argumento para obter as informações sobre as figuras no projeto Footwowing.
/** Forward the event
When you click the forward menu in the top right corner of the applet, the shareAppMessage method in the applet will be triggered, and then callback to the native method
@param contentInfo Applet related information, including applet id, applet name, applet icon, applet screenshot (5:4), etc.
{
appAvatar = "applet icon address " ;
appDescription = "Description of the applet " ;
appId = "applet id" ;
appInfo = {}; // Client can define custom fields in appInfo, appInfo content will be passed through
appStartParams = {
path = "path of applet page when click forward " ;
};
appThumbnail = "Path to the applet cover image, possibly network or local, with an aspect ratio of 5:4" ;
appTitle = "applet name " ;
userId = "applet developer id" ;
}
@param completion callback. If you want to notify the applet of the result of the completion of the forwarding operation, you need to call this block.
*/
- (BOOL)forwardAppletWithInfo:(NSDictionary *)contentInfo completion:(void (^)(FATExtensionCode code, NSDictionary *result))completion;Onde appInfo É uma propriedade adicionada a onShareAppMessage pelo applet, o conteúdo pode definir várias chaves-Pares de valor.
Finalmente, basta chamar a interface do applet de compartilhamento do Phiz Sharing Sharing SDK.
2.3.2 Personalize a interface de compartilhamento do Phiz e ligue para a interface de compartilhamento Phiz personalizada no applet.
Como as APIs de applet personalizadas do applet applet sdk de phizdclip, podemos começar com uma API Schoming personalizada e, depois do Inn, o Applet SDK, você pode registrar uma API LIKE ISSO.
[[FATClient sharedClient] registerExtensionApi:@ "shareToPhiz" handle:^(id param, FATExtensionApiCallback callback) {
// Here we get param, the object passed in from our applet.
// Then call the Phiz share interface and share.
callback(FATExtensionCodeSuccess, nil);
}];Além disso, crie o PhizClipConf.js Arquivo na raiz do applet, com o exemplo de configuração a seguir:
module.exports = {
extApi:[
{// normal interactive API
name: 'shareToPhiz', // Extension api name This api must be implemented Native
params: {// Extend the api parameter format to list only the required attributes
path: '',
title: '',
description: ''
}
}
]
}Por fim, basta chamar a interface de compartilhamento personalizada do Phiz no applet:
pz.shareToWechat2.4 Por que não posso chamar a solicitação, o Farofile, download de interfaces do arquivo de download? Não consigo ver o processo de chamar o evento de interfaces Eve, peguei o pacote.
R: Se as interfaces sobre as interiner não puderem ser chamadas, você geralmente verá a mensagem de erro a seguir: url not in domain list Então então
Isso ocorre porque não há nome de domínio configurado para o applet em segundo plano, e a maneira de configurar o nome do domínio é semelhante à configuração do nome do domínio. Do Phiz, que é configurar seccionalmente o nome de domínio de solicitação/uploadFile/download.
2.5 Por que o link da Web não pode ser carregado no componente da WebView do applet?
R: Se você estiver usando o WebView para abrir um link e ele solicita Does not support opening non-business domain name xxxxxxxxx, please reconfigure . Isso ocorre porque o nome de domínio comercial, que é o domínio dos links do White Webview, não está configurado na plataforma de administração.
2.6 Como definir a maneira de fazer a transição ao iniciar o applet?
R: Agora existem 2 tipos de animações para iniciar o applet da seguinte forma.
- A abordagem atual.
- Pushh-animação ao vivo.
Basta definir transitionStyle Ao chamar as seguintes funções de inicialização, o valor de enumeração é: FattraAnstyleup, FattraAnstystylePush.
[[FATClient sharedClient] startRemoteApplet:appId startParams:appStartParams InParentViewController:self transitionStyle:FATTranstionStyleUp completion:^(BOOL result, NSError *error) {
NSLog(@ "result:%d---error:%@" , result, error);
}];2.7 Como registrar API de applet personalizado?
A: Consulte iOS Register Custom Applet API Faça a operação correspondente
2.8 Como obter uma captura de tela da página atual do applet?
R: Ligue para a seguinte função para obter uma captura de tela da página atual do applet (a captura de tela é 5: 4).
UIImage *coverImage = [[FATClient sharedClient] getCurrentAppletImage];2.9 O menu no botão mais no canto superior direito do applet support cusmato? Se sim, como o implemento?
A:: Support.
Dois métodos de proxy precisam ser implementados. Primeiro, personalize um FATClientHelper classe que imagina o FATAppletMoreMenuDelegate Protocolo.
#import <Foundation/Foundation.h>
#import <FinApplet/FinApplet.h>
@interface FATClientHelper : NSObject<FATAppletMoreMenuDelegate>
+ (instancetype)shareInstance;
@endEntão, após a inicialização bem -sucedida do SDK, o proxy do SDK para o FATClientHelper Objeto.
Código de exemplo.
[[FATClient sharedClient] initWithConfig:config error:nil];
[FATClient sharedClient].moreMenuDelegate = [FATClientHelper shareInstance];Finalmente, a implementação em FATClientHelper , o método de seguinte propocolo.
// Return the menu object to inject, which implements FATAppletMenuProtocol
// Menu objects are of two types (Common by default) :
// 1.OnMiniProgram type: need background configuration + small program configuration, take the same menuId set display
// 2.Common type: display if configured
// PS: This is compatible with the old version, if the background version is not upgraded, or the background version is not configured, only the menuId of the adaptation menu object needs to be NSString type
- (NSArray<id<FATAppletMenuProtocol>> *)customMenusInApplet:(FATAppletInfo *)appletInfo atPath:(NSString *)path
{
FATCustomMenuModel *favModel1 = [[FATCustomMenuModel alloc] init];
favModel1.menuId = @ "WXShareAPPFriends" ;
favModel1.menuTitle = @ "Phiz friends" ;
favModel1.menuIconImage = [UIImage imageNamed:@ "minipro_list_wx_chat" ];
favModel1.menuType = FATAppletMenuStyleOnMiniProgram;
FATCustomMenuModel *favModel2 = [[FATCustomMenuModel alloc] init];
favModel2.menuId = @ "WXShareAPPMoments" ;
favModel2.menuTitle = @ "Phiz Moments" ;
favModel2.menuIconImage = [UIImage imageNamed:@ "minipro_list_wx_monents" ];
favModel2.menuType = FATAppletMenuStyleOnMiniProgram;
FATCustomMenuModel *favModel3 = [[FATCustomMenuModel alloc] init];
favModel3.menuId = @ "Restart" ;
favModel3.menuTitle = @ "restart" ;
favModel3.menuIconImage = [UIImage imageNamed:@ "minipro_list_restart" ];
favModel3.menuType = FATAppletMenuStyleCommon;
return @[favModel1, favModel2, favModel3];
}
// Event when the custom menu is clicked (old version, used when the background is not upgraded or the menu is not configured after upgrading)
- (void)customMenu:(id<FATAppletMenuProtocol>)customMenu inApplet:(FATAppletInfo *)appletInfo didClickAtPath:(NSString *)path
{
NSLog(@ "So I clicked%@" ,customMenu.menuTitle);
NSLog(@ "path = %@" ,path);
}
// Event when clicking custom menu (new version, used in background and applet configuration)
- (void)clickCustomItemMenuWithInfo:(NSDictionary *)contentInfo completion:(void (^)(FATExtensionCode, NSDictionary *))completion
{
/**
contentInfo contains
{
@ "title" : @ "title" ,
"description" : @ "description" ,
@ "imageUrl" : @ "image path " ,
@ "path" : @ "path to the applet page when clicked " ",
@ "menuId" : @ " The clicked menu button id " ,
@ "params" : self.params // Raw parameter data, provided by the applet
}
*/
// Applet callback call, notify applet click event handling
completion(FATExtensionCodeSuccess, contentInfo);
}2.10 Apoia que oculte completamente a barra de navegação em uma página do applet? Se sim, como alcançá -la?
A:: Support.
Como Phiz, Alipay, Baidu e outros applets navigationStyle tem default/custom Dois valores, enquanto o applet sdk do Phizclip adiciona um hide Além disso, isto é, tem default/custom/hide Três valores.
Então, na página em que você precisa viver a barra de navegação, basta definir navigationStyle para hide Então então
2.11 Como definir regras personalizadas para publicação em escala de cinza?
A: Um método de protocolo no FATAppletConfigurationDelegate do applet sdk.
- (NSDictionary *)grayExtensionWithAppletId:(NSString *)appletIdBasta implementar este método de protocolo.
O código de amostra é o seguinte:
/// Grayscale extension parameter of applet
/// @param appletId applet id
- (NSDictionary *)grayExtensionWithAppletId:(NSString *)appletId
{
NSDictionary *grayExtension = @{@ "key1" :@ "value1" };
// if ([appletId isEqualToString:@ "5e017a61c21ecf0001343e31" ]) {
// grayExtension = @{@ "fckey1" :@ "fcvalue1" };
// }
return grayExtension;
}Então, quando o Applet SDK carregar o applet, ele chamará o método do propocolo para obter os parâmetros de extensão em escala de cinza do applet e passar o gelo de serviço de back -end para corresponder às regras relevantes.
2.12 O que devo fazer se o pagamento da web não carregar no applet?
R: Quando o applet não carrega uma página da web, você pode ativar o interruptor de log de log do SDK. binderror ligar de volta.
Para Exmple, se você vir uma mensagem de erro como esta:
Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection."A análise mostra que é antes do endereço da rede ser propocolo HTTP, você precisa configurar configurações de seção de transporte de aplicativos-> Permitir cargas arbitrárias sim em INCO.Plist do projeto de aplicativo.
2.13 O applet SDK suporta a adaptação do modo escuro?
A:: Support.
Quando o Applet SDK é inicializado, há uma propriedade na classe Fatuiconfig que só precisa ser definida uiconfig.autoAdaptDarkMode = YES; . A adaptação do modo escuro no Applet SDK, incluindo mais página de menu, sobre a página, reclamações e página de feedback. Pelo modo escuro.
2.14 O Applet SDK suporta solicitações de permissão para desativar?
Nosso aplicativo é um aplicativo de tipo financeiro, o controle das permissões, especialmente permissões sensíveis (como localização) é muito importante, esperamos que ok?
A:: Support.
A classe de configuração do Applet SDK tem uma propriedade desabilitando que controla a aplicação de permissões.
Se esse impulso não estiver configurado, ou se estiver configurado como não, então quando o Applet SDK usa uma API que não o tenha antes do usuário, ela o solicitará. O usuário; se esse processo estiver definido como sim ( config.disableAuthorize = YES; ), O Applet SDK usa uma API A que não o autorizou pelo usuário, ele retornará uma falha no retorno de chamada de falha da API O motivo da falha (por exemplo, ChoiceImage: Fail Nenhum acesso ao álbum) está incluído no ERRMSG.
Além disso, a classe Config do Applet SDK possui uma propriedade AppleTaUTOAuthouse, que pode controlar o applet para solicitar permissões ao SDK. Se esse impulso não estiver configurado ou configurado como não, então quando o usuário precisa usar,-A UP Box perguntará ao usuário se ele/ela está autorizado a concordar com o aplicativo de permissão, depois que o usuário concordar, o applet solicitará permissão ao SDK, se, se o usuário recusar, a permissão não será aplicada ao SDK e retornará um fracasso, o ErrMSG contém o motivo da falha (por exemplo, CHOLEGEIMAGE: FAIL NO Acesso ao Álbum); se esse processo estiver definido como sim, ele se compromete significa que o público. Vai aparecer.
2.15 Você suporta substituir o ícone do botão traseiro? Como faço para substituí -lo?
A:: Support.
Basta colocar uma imagem PNG no projeto e nomear FIN FINAGE_BTN_NAVI_BACK, você precisa acessá -lo através do MainBundle.
2.16 Apoia a abertura do Safari em applets?
A:: Support.
Embora não haja API em nosso SDK para fazer com que o applet abra o safari móvel e carregue o URL especificado, nosso SDK suporta registrar a API personalizada; portanto, por melhor API do USOMOM H5, podemos alcançar essa função. Existem dois cenários para injetar a API personalizada : Registrando a API para applets e registro da API para H5 em applets. O SDK fornece funções separadas para esses dois cenários e eles são tratados de maneira diferente, por isso, editamos a água searatly.
Open safari in the H5 of the applet Primeiro, após a inicialização do SDK, registre uma API personalizada com o exemplo de snippet de código a seguir.
[[FATClient sharedClient] fat_registerWebApi:@ "openInSafari" handle:^(id param, FATExtensionApiCallback callback) {
NSString *url = param[@ "url" ];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
callback(FATExtensionCodeSuccess, nil);
}];Então, a página que carrega o H5 intropõe o PhizClip applet jssdk Então então
Finalmente, na lógica em H5, a API personalizada registrada é chamada:
window.FinChatJSBridge.invoke('openInSafari', {url:'https://www.PhizClip.com'}, (result) => {
console.log(result)
});Abra o Safari no applet
Primeiro, registre a API personalizada para o applet, exemplo de snippet.
[[FATClient sharedClient] registerExtensionApi:@ "openInSafari" handle:^(id param, FATExtensionApiCallback callback) {
NSString *url = param[@ "url" ];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@ "" ]];
callback(FATExtensionCodeSuccess, nil);
}];Então, na raiz do applet PhizClipConf.js , Configure a API personalizada.
module.exports = {
extApi:[
{
name: 'openInSafari',
params: {
url: ''
}
}
]
}Finalmente, a personalização pode ser chamada no applet da seguinte forma.
pz.openInSafari({
url:'https://www.baidu.com',
success: function (res) {
console.log( "startRecord success" );
console.log(res);
},
fail: function (res) {
console.log( "startRecord fail" );
console.log(res);
}
});2.17 O applet suporta obter os parâmetros para iniciar o applet? Como obtê -los?
A:: Support. Mas o applet pode obter apenas o parâmetro de consulta no parâmetro de inicialização.
Os parâmetros na consulta estão conectados ao JSON, e o applet pode obter as opções no Livecle Events onLaunch (Opções).
Para Exmple, o applet é lançado com os seguintes parâmetros:
NSDictionary *startParam = @{
@ "query" :@ "key1=value1&key2=value2" ,
@ "path" :@ "pages/showToast/showToast"
};
[[FATClient sharedClient] startRemoteApplet:@ "afdfddfdfdf" startParams:startParam InParentViewController:self completion:nil];Em seguida, para obter os parâmetros de Laminch no evento LIFECE do applet:
onLaunch(options) {
console.log( "App onLaunch =====>" + JSON.stringify(options))
//options.query.key1
//options.path
},
onShow(options) {
// Do something when show.
console.log( "App onShow =====>" + JSON.stringify(options))
//options.query.key1
//options.path
},2.18 O SDK pode definir o UserAgent? Como faço para configurá -lo?
A:: Support.
Existe uma configuração AppingCustomUSUSERAGENT It no Fatuiconfig. O conteúdo definido será adicionado ao USERAQUENT do WebView correspondente à idade do applet p.
Exemplo.
FATUIConfig *uiConfig = [[FATUIConfig alloc] init];//[FATClientHelper uiConfig];
uiConfig.progressBarColor = [UIColor redColor];
// Add the userAgent content
uiConfig.appendingCustomUserAgent = @ "custom agent" ;
[[FATClient sharedClient] initWithConfig:config uiConfig:uiConfig error:nil];2.19 Como implementar o terceiro-Party login no applet?
1. Integração do Applet Phizclip SDK (Applet Phizclip SDK)
Os desenvolvedores precisam primeiro para integrar o applet phizdclip sdk, consulte PhizClip applet open platform iOS integration document Para o guia de integração, a plataforma aberta possui um documento de integração detalhado do iOS, então quero repeti -lo aqui.
2. Customize a interface do applet para obter login de autorização, obter informações do usuário, obter status de login e outras funções
Para que o applet obtenha dados de aplicativos que não sejam o applet, você precisa registrar a interface personalizada do applet, consulte PhizClip Applet Open Platform - Custom Applet Interface Para os detalhes da interface personalizada. Os parâmetros nos exemplos a seguir estão a critério do desenvolvedor, e este artigo é apenas uma demonstração.
- Personalize a interface de login de login de autorização
@property (nonatomic,strong) FATExtensionApiCallback callBack;
[[FATClient sharedClient] registerExtensionApi:@ "login" handle:^(id param, FATExtensionApiCallback callback) {
self.callBack = callback;
// Do a third party login.
[self thirdLogin];
}];
- (void)thirdLogin {
// When ToDo gets the result, it calls back the information it wants to send to the applet. It's up to the developer to decide what happens, PhizClip just passes it around, doesn't save it
// For example login WeChat tripartite document at https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Development_Guide.html
self.callBack(FATExtensionCodeSuccess, @{@ "code" : @ "success" , @ "openid" : @ "XXXXXXXXXXXXXXXXX" });
}- Personalize a interface getUserProfile para obter informações do usuário
[[FATClient sharedClient]registerExtensionApi:@ "getUserProfile" handle:^(id param, FATExtensionApiCallback callback) {
NSDictionary *userInfo = @{@ "nickName" : @ "zhangshan" , @ "avatarUrl" : @ "" , @ "gender" : @1, @ "country" : @ "china" , @ "province" : @ "Guangdong province" , @ "city" : @ "shenzhen" ,@ "language" : @ "zh_CN" };
NSDictionary *resDic = @{@ "userInfo" : userInfo};
callback(FATExtensionCodeSuccess, resDic);
}];- Interface de sessão de verificação personalizada para verificar o token do usuário
[[FATClient sharedClient] registerExtensionApi:@ "checkSession" handle:^(id param, FATExtensionApiCallback callback) {
// For example
if ([param[@ "code" ] intValue] == 1) {
// ToDo something
}
}];2.20 isso suporta substituindo o "applet" Texto no SDK com outro nome?
A:: Support.
Existe um item de configuração do AppletText no fatuiconfig, e o conteúdo que você definirá substituirá o original "applet" texto.
Exemplo.
FATUIConfig *uiConfig = [[FATUIConfig alloc] init];//[FATClientHelper uiConfig];
// Replace "applet" with "x app"
uiConfig.appletText = @ "x application" ;
[[FATClient sharedClient] initWithConfig:config uiConfig:uiConfig error:nil];2.21 Quando os dados são relatados, a compressa de dados relatada é relatada?
R: Quando os dados são relatados, o SDK não comprime os dados relatados por padrão, se você deseja ativar a compactação, poderá fazê -lo configurando o parâmetro EnabableApMDATACOMPRESS.
Exemplo.
FATStoreConfig *storeConfig = [[FATStoreConfig alloc] init];
storeConfig.sdkKey = @ " The SDK Key that is filled in here " ;
sdkSecret = @ " Fill in SDK secret here " ;
storeConfig.apiServer = @ " Fill in your server address here " ; // example :https://api.PhizClip.com;
FATConfig *config = [FATConfig configWithStoreConfigs:@[storeConfig]];
config.enableApmDataCompression = YES;2.22 Apoia a desativação da API Applet para acessar informações regulatórias?
A:: Support.
O SDK, por padrão, permite que os applets ligue para a API Applet (getSuperviseInfo) que obtém as informações de supervisão, para desativá -la, você pode configurar o parâmetro Disligetsuper Viseinfo para sim, inicializando o SDK.
Exemplo.
FATStoreConfig *storeConfig = [[FATStoreConfig alloc] init];
storeConfig.sdkKey = @ " The SDK Key that is filled in here " ;
sdkSecret = @ " Fill in SDK secret here " ;
storeConfig.apiServer = @ " Fill in your server address here " ; // example :https://api.PhizClip.com;
FATConfig *config = [FATConfig configWithStoreConfigs:@[storeConfig]];
config.disableGetSuperviseInfo = YES;Quando desativado, o applet receberá um getSuperviseInfo:fail disabled retorno de chamada quando liga getSuperviseInfo Então então
2.23 Apoia a abertura do applet da experiência?
A:: Support.
A plataforma suporta configurar a versão e a experiência dos membros da experiência para o applet, e o método com permissão de experiência é a estar do applet.
Etapas para usar a versão Experience do applet:
Carregue o applet na plataforma e configure a versão de experiência para o applet, consulte Applet Development - Debugging Para o método de configuração
Passe o ID do usuário ao impirizar o SDK.
FATStoreConfig *storeConfig = [[FATStoreConfig alloc] init];
storeConfig.sdkKey = @ " The SDK Key that is filled in here " ;
sdkSecret = @ " Fill in SDK secret here " ;
storeConfig.apiServer = @ " Fill in your server address here " ; // example :https://api.PhizClip.com;
FATConfig *config = [FATConfig configWithStoreConfigs:@[storeConfig]];
config.currentUserId = @ "userId" ;Somente quando o ID de usuário de invasão está na lista de membros configurados no applet, você pode abrir o verso da extensão, caso contrário, quando você abrir o applet, você será rápido "No experience permission" Então então
- Abra o applet chamando a interface fornecida pelo SDK, consulte QR code to open the applet para a interface
2.24 Você pode oferecer suporte a applets offline para melhorar primeiro-Velocidade de lançamento do tempo?
R: A partir do Vering 2.35.1, você pode configurar o caminho para o pacote de applet do Office e o pacote da biblioteca base do Office. Iniciar. Verifique também as atualizações e puxe a versão mais recente do applet para a próxima vez que o applet for aberto.
O código de amostra é o seguinte:
FATAppletRequest *request = [[FATAppletRequest alloc] init];
// appletId can from the small and medium-sized program list for https://www.PhizClip.com/mop/mechanism/#/Applet/my pages
request.appletId = @ "61ee725a8bc99400018e1f7c" ;
request.apiServer = @ "https://api.PhizClip.com" ;
// Offline applet compressed package can be downloaded from my applet -> Applet list -> Details -> Export offline package -> Applet
request.offlineMiniprogramZipPath = [[NSBundle mainBundle] pathForResource:@ "hahahhah" ofType:@ "zip" ];
// Offline base library can be downloaded from my applet -> Applet List -> Details -> Export offline package -> Applet Base Library
Request. OfflineFrameworkZipPath = [[NSBundle mainBundle] pathForResource: @ "framework - 2.12.3 ofType:" @ "zip" ].
[[FATClient sharedClient] startAppletWithRequest:request InParentViewController:self.window.rootViewController completion:^(BOOL result, FATError *error) {
NSLog(@ " Open applet 11:%@" , error);
} closeCompletion:^{
NSLog(@ " close applet 11" );
}];2.25 A funcionalidade WebRTC é suportada em sistemas abaixo do iOS 14.3?
A: Suporte. A plataforma implementa funções relacionadas ao WebRTC no iOS9 ou acima pela embalagem secundária do GoogleWebRTC Library.
As etapas a serem usadas são as seguintes.
- Adicione uma dependência do WebRTC-SDK para o arquivo podfile do projeto Xcode:
pod 'FinAppletWebRTC'- Apresente o webrtc-Cabeçalhos SDK:
#import <FinAppletWebRTC/FinAppletWebRTC.h>- Registrando componentes do WebRTC:
// WebRTC initialization
[FATWebRTCComponent registerComponent]Depois de concluir as etapas sobre as etapas, você pode ligar para a API WebRTC fornecida por nós no applet para imagem.
2.26 O que o mapsdk faz e como usá -lo
R: MapsDK suporta o componente do mapa e a API de localização. Map e Location Funções. Gode Map|Gode Location ,, Baidu Map|Baidu Location , Duas combinações, o padrão é implementado pelo mapa nativo, opte por integrar o Baidu/Gode, se integrado ao mesmo tempo, use o último inicializado em e.
Use as seguintes etapas:
- Adicione uma dependência do MAPSDK ao arquivo podfile do projeto Xcode:
// If you need to use Baidu Maps SDK, add this extension SDK
pod 'FinAppletBDMap'
// If you need to use the AmAP SDK, add this extension SDK
pod 'FinAppletGDMap'- Apresente o arquivo de cabeçalho MapSDK:
// Similarly, if using Baidu maps, import this header
#import <FinAppletBDMap/FinAppletBDMap.h>
// Import this header if using AmAP
#import <FinAppletGDMap/FinAppletGDMap.h>- Registre o componente MAPSDK:
// Prepare map sdk initialization
// Initialize with this api if using Baidu maps
[FATBDMapComponent setBDMapAppKey:@ " Application key" ]
// Initialize with this api if using AmAP
[FATGDMapComponent setGDMapAppKey:@ " application key" ]- O componente do mapa ou a API do mapa é chamado no applet:
2.27 Por que é o pH.
R: Como a Apple suporta o terceiro-Criação do partido de bibliotecas dinâmicas, existem muitos terceiros-SDKs da parte que são bibliotecas dinâmicas. Por uso de bibliotecas dinâmicas, você pode rejeitar o tamanho do arquivo executável de alimentos. Tudo como pós -pós -phizdclip. Por enquanto, as bibliotecas estáticas e dinâmicas, portanto, apenas as bibliotecas dinâmicas são embaladas para itens normais.
Se você insistir em precisar de bibliotecas estáticas, também podemos lidar com as bibliotecas estáticas como um pacote especial e entregá -las searatly.
Além disso, a biblioteca estática só pode ser integrada manualmente agora, e as etapas de integração são as seguintes:
1. Add SDK to project

Obviamente, se você não precisar usar a API no FinalText.FrameWork, também não poderá adicionar diversão. Framework e FINAPLETEXT.Bundle.
Nó da
Ao intropor Finaltbdmap (mapa do Baidu) ou FINAPPletgdmap (mapa de Gaode) manualmente, você precisa adicionar manualmente o arquivo de recursos do pacote na estrutura ao projeto.
2 Modify project configuration
- Adicionando bibliotecas dinâmicas do sistema dependente:
- Adicione-Objc para construir configuração-> Outros sinalizadores do vinculador.
Nó da
Ao intropor Finaltbdmap (mapa Baidu) ou FinAppletGDMAP (mapa de Gaode) manualmente, o tipo de incorporação padrão (Tarfgetss--- Em geral--- Estruturas, bibliotecas, conteúdo incorporado ABD). Quando intropinando manualmente mapas de Gaode, você precisa acessar o AMAP3DMAP de Gaode.-NÃO-IDFA, Amplocação-NÃO-IDFA, AMAPSERCH-NÃO-As bibliotecas da IDFA, ao intranjar os mapas do Baidu, você precisa aceitar, Baidumapkit/Map, BaidumapKit/Pesquisar Biblioteca. B Aidumapkit/Pesquise três bibliotecas.
3 Open Project
Massa-Clique em xxxx.xcodeproj para abrir o projeto.
4 Configuring the archive script
O SDK inclui a arquitetura x86_64 para facilitar a depuração do emulador onde. o emulador e submeter -se ao mercado de aplicativos corretamente.
Obviamente, você também pode nos pedir um SDK que não inclua um emulador.

O script diz o seguinte:
#!/bin/sh
# Strip invalid architectures
strip_invalid_archs() {
binary= "$1"
echo "current binary ${binary}"
# Get architectures for current file
archs= "$(lipo -info " $binary " | rev | cut -d ':' -f1 | rev)"
stripped= ""
for arch in $archs; do
if ! [[ "${ARCHS}" == * "$arch" * ]]; then
if [ -f "$binary" ]; then
# Strip non-valid architectures in-place
lipo -remove "$arch" -output "$binary" "$binary" || exit 1
stripped= "$stripped $arch"
fi
fi
done
if [[ "$stripped" ]]; then
echo "Stripped $binary of architectures:$stripped"
fi
}
APP_PATH= "${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH= "$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
strip_invalid_archs "$FRAMEWORK_EXECUTABLE_PATH"
done2.28 O applet suporta menus personalizados?
Um suporte.
O menu personalizado é exibido implementando o applet: (FatAppletInfo _) apppletinfo didclickmorebtnatpath: (nsString _) caminho proxy metapletmoremeleg comeu.
/**
In the upper right corner capsule [...] You can pop up more views of your design in this event.
Therefore, the proxy event is implemented so that the following two custom menu events are not fired
@param appletInfo appletInfo
Pathapplet page path, example: pages/index/index
*/
- (void)applet:(FATAppletInfo *)appletInfo didClickMoreBtnAtPath:(NSString *)path;Se você implementar um menu personalizado, mas deseja pular para as configurações, sobre o pagamento e o feedback do applet ou deseja implementar a função de encaminhamento, você pode usar a API relevante fornecida pelo FatMoremenuhelper para implementá -lo.
/// Trigger the forwarding event, which is used to get the information of the applet used in forwarding. After getting the information of the applet, Triggers - (void)forwardAppletWithInfo:(NSDictionary *)contentInfo completion: void (^)(FATExtensionCode, NSDictionary *))completion of this callback
/// @param appletId applet id
+ (void)invokeForwardMenuAction:(NSString *)appletId;
/// Open the applet feedback page
/// @param appletId applet id
+ (void)goToFeedbackPage:(NSString *)appletId;
/// Open the applet's About page
/// @param appletId applet id
+ (void)goToAboutPage:(NSString *)appletId;
/// Open the applet Settings page
/// @param appletId applet id
+ (void)goToSettingPage:(NSString *)appletId;
/// Turn debug mode on // Turn debug mode on // Turn debug mode off if config has enableAppletDebug set to true
/// @param appletId applet id
/// @param enable Enables debug mode
+ (void)setEnableAppletDebug:(NSString *)appletId enable:(BOOL)enable;
/// Get if the applet is in debug mode
/// @param appletId applet id
+ (BOOL)isEnableAppletDebug:(NSString *)appletId;
/// Get data for custom menu items (need applet to implement menu items, need applet to provide additional call parameters)
/// @param appletId applet id
/// @param menuId Menu id
/// @param complete result callback
+ (void)getMiniProgramTypeMenuData:(NSString *)appletId menuId:(NSString *)menuId complete:(void(^)(NSDictionary *result,FATAppletInfo *appletInfo))complete;
/// Check whether the applet implements the custom menu function
/// which whether the small program called onShareAppMessage event the influence showShareMenu/hideShareMenu API
/// If the applets call showShareMenu after calling this method detection, no matter whether the applets implement onShareAppMessage event or not, the corresponding value of this event is YES
/// If the applet calls this method after calling hideShareMenu, NO matter whether the applet implements onShareAppMessage event or not, the corresponding value of this event is no
/// @param appletId applet id
/// @param menuIds Custom menu ID array
/// @param complete result callback, callback parameter is NSArray, NSArray element is @{ "eventName" : ## applet event name ##, "menuId" : ## menu id##, "value" : ## event implemented #}
+ (void)checkMenus:(NSString *)appletId menuIds:(NSArray<NSString *> *)menuIds complete:(void(^)(NSArray *result))complete;Código de amostra Customm:
// in achieving FATAppletMoreMenuDelegate method to realize the proxy class, in the agent approach can use a custom menu view, finally must return to YES
- (BOOL)appletInfo:(FATAppletInfo *)appletInfo didClickMoreBtnAtPath:(NSString *)path {
// Here we use UIAlertController as an example (user-definable view)
UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@More menus "message:@" Customize more menus" preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *forwardAction = [UIAlertAction actionWithTitle: @ "transmit" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
// When the click event is responded, the [+ (void)invokeForwardMenuAction:] method is called to realize the call of the [forwarding] function
[FATMoreMenuHelper invokeForwardMenuAction:appletInfo.appId];
}];
[alertVC addAction:forwardAction];
UIAlertAction *feedbackAction = [UIAlertAction actionWithTitle:@ "Feedback and Complaints" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
// Click on the event response, call the [+ (void)goToFeedbackPage:] method to achieve the [feedback and complaint] page jump
[FATMoreMenuHelper goToFeedbackPage:appletInfo.appId];
}];
[alertVC addAction:feedbackAction];
UIAlertAction *aboutAction = [UIAlertAction actionWithTitle:@ "about" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
// When the response is clicked, the [+ (void)goToAboutPage:] method is called to navigate to the [About] page
[FATMoreMenuHelper goToAboutPage:appletInfo.appId];
}];
[alertVC addAction:aboutAction];
UIAlertAction *settingAction = [UIAlertAction actionWithTitle:@ "As configurações" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
// When the event is clicked, the [+ (void)goToSettingPage:] method is called to navigate to the [Settings] page
[FATMoreMenuHelper goToSettingPage:appletInfo.appId];
}];
[alertVC addAction:settingAction];
// Gets the status of debug Mode button
BOOL enableDebug = [FATMoreMenuHelper isEnableAppletDebug:appletInfo.appId];
UIAlertAction *debugAction = [UIAlertAction actionWithTitle: enableDebug ? @ "Turn debug mode on" : @ " Turn debug mode on" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
// Click event response, called "+ (void) setEnableAppletDebug: enable:" method, realize the state of "debug mode" button to set
[FATMoreMenuHelper setEnableAppletDebug:appletInfo.appId enable:!enableDebug];
}];
[alertVC addAction:debugAction];
// Custom menu button ids
NSArray *menuIds = @[ @ "WXShareAPPFriends" , @ "WXShareAPPMoments" , @ "ShareSinaWeibo" , @ "ShareQQFriends" ];
// Call [+ (void) checkMenus: menuIds: complete: 】 method, testing the incoming menuIds whether within the small program implementation
[FATMoreMenuHelper checkMenus:appletInfo.appId menuIds:menuIds complete:^(NSArray * _Nonnull result) {
// Iterate over the detection results
for (NSDictionary *dict in result) {
NSString *title = dict[@ "eventName" ];
NSString *menuId = dict[@ "menuId" ];
BOOL value = [dict[@ "value" ] boolValue];
UIAlertAction *customAction = [UIAlertAction actionWithTitle:title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
// Click event response, call [+ (void) getMiniProgramTypeMenuData: menuId: complete: 】 method, trigger small program calls the custom button
[FATMoreMenuHelper getMiniProgramTypeMenuData:appletInfo.appId menuId:menuId complete:^(NSDictionary * _Nonnull result, FATAppletInfo * _Nonnull appletInfo) {
// Customize the menu button click event callback, add the business code here
}];
}];
// Sets the click state of the button
customAction.enabled = value;
[alertVC addAction:customAction];
}
[alertVC addAction:[UIAlertAction actionWithTitle:@ "cancel" style:UIAlertActionStyleCancel handler:nil]];
// Display a custom menu
UIViewController *topVC = [[UIApplication sharedApplication] fin_topViewController];
[topVC presentViewController:alertVC animated:YES completion:nil];
}];
// Returns YES
return YES;
}3. Depuração
3.1 Como depurar o applet?
Se você precisar depurar um applet, existem maneiras severais de ativar o modo de depuração.
- Defina
config.enableAppletDebug = YES;Na configuração de inicialização. Ele pode fazer com que todos os applets mostrem vconsole, mantenha essa configuração desligada quando o aplicativo estiver online. OT desative a depuração)
- Defina
- Quando
config.enableAppletDebug = NO;Na configuração de inicialização, cada applet pode ativar o modo de depuração de forma independente. Não-Versão on -line (versão super como experiência, versão de auditoria, versão de desenvolvimento, versão de visualização) pode abrir o modo de depuração por [Open Debug] no menu mais.
- Quando
- Ativar modo de depuração chamando Applet API (
pz.setEnableDebug) ..
- Ativar modo de depuração chamando Applet API (
No modo de depuração, o applet abrirá o vconsole, para que você possa ver as informações de log do applet, informações do ambiente etc. no vconsole.
Além disso, após a integração, o Applet SDK, o Xcode pode executar o applet (o aplicativo embalado com o desenvolvimento de perfil também pode ser visualizado pelo computador Safari), você pode abrir o safari de computador e depois na barra de ferramentas development , Selecione os emulator ordenado real device Em execução, você pode selecionar a lista de páginas de páginas a partir do applet, selecionar a página aberta atual, você pode revisar os elementos da página, visualizar a rede. K chamadas, ter alguns registros de logs etc.