Skip to content

Integração do iOS

Integração do código de amostra

Fornecemos um projeto de estilo DEMO que inclui "Phiz Login, Phiz Pay, Gaode mapa, Baidu Map", Os desenvolvedores podem obter o Integrando o código de exemplo aqui ios-sample-demo Se você não tem acesso ao github em seu ambiente, você pode visitar também o gitee espelho do repositório clicando aqui.

1. Obter credenciais de miniaplicativos

Para usar o SDK, você precisa solicitar SDK KEY e SDK SECRET. Somente se a SDK KEY e o SDK SECRET corretos forem configurados durante a inicialização do SDK, ele funcionará

1.1 Criando aplicativos

Usuários registrados precisam fazer login em "App Management - New Partner App" para completar a criação de aplicativos
"

Image.png

1.2 Obtendo a SDK KEY e SDK SECRET

Depois de criar o aplicativo e adicionar o ID do pacote, se você precisar exportar o SDK KEY e o SDK SECRET correspondentes, selecione Copiar após o ID do pacote correspondente colar a operação via Ctrl+VorCommand+V;
!

Image.png Of which.

  • SDK KEY:esse é a credencial para o aplicativo parceiro usar o SDK do miniaplicativo. Se a SDK KEY falhar, todas as APIs do SDK ficarão indisponíveis
  • SDK secret:é o certificado de segurança para acessar o serviço, não fornecer para terceiros.

Dica

Para detalhes em criando aplicativos e obtendo SDK KEY e SDK SECRET, veja [Introdução - Guia de acesso - Guia de acesso empresarial - 7. 94%E7%A7%BB%E5%8A%A8%E5%BA %94%E7%94%A8) seção

2. Integration SDK

Miniaplicativos PhizClip atualmente suportam Integração Pod ou Integração manual.

2.1 Integração Pod

2.1.1 Instalando o ambiente do Pod

O CocoaPods oferece um sistema de gerenciamento de dependências muito simples para evitar erros gerados por importações manuais. Se você ainda não instalou o CocoaPods, pode consultar o Guia Oficial de Instalação (em inglês) ou o Tutorial de Instalação do CocoaPods (em chinês).

objectivec
sudo gem install cocoapods
pod setup

2.1.2 Criando arquivos Podfile

Nota

Começando da versão 2.8.5, o SDK do miniaplicativo do PhizClip é divido em vários SDKs: FinApplet (core SDK) , FinAppletExt , FinAppletBDMap , FinAppletGDMap , FinAppletWebRTC , FinAppletBLE, FinAppletAgoraRTC, FinAppletContact, FinAppletClipBoard , FinAppletWXExt . Apenas inApplet é requerido, as outras extensões do SDK podem ser integradas conforme apropriado

Se não for necessário utilizar o SDK de extensão, simplesmente se baseie do FinalApplet no arquivo Podfile. Se precisar utilizar a API no SDK de extensão, então também será necessário depender do FINAPLETEXT .

  • Quando usando a função de componente Mapa, você pode se basear em FINAPPletbdmap (mapas Baidu) ou FINAPLETGDMAP (Gaode Maps) se quiser utilizar um mapa de três vias para implementá-lo, ou, por padrão, o mapa nativo
  • Se for necessário usar a função WebRTC em seu miniaplicativo, você pode adicionar a dependência de FINAPLETWEBRTC ao podfile , qual é nossa biblioteca de encapsulamento secundária baseada na biblioteca Google WebRTC, oferecendo suporte ao iOS 9 e versões posteriores
  • Se a funcionalidade do Bluetooth for requerida no miniaplicativo, adicione a dependência FinAppletBLE ao podfile
  • Se as funcionalidades live-pusher, live player forem requeridas no miniaplicativo, adicione a dependência FinAppletAgoraRTC ao podfile
  • Se for preciso usar addPhoneContact no miniaplicativo para adicionar contatos, adicione a dependência FinAppletContact ao podfile
  • Se a funcionalidade da área de transferência for necessária no applet, adicione o FinAppletClipBoard dependência para o podfile
  • Se for necessário acessar as capacidades de login, pagamento e informações do usuários do Phiz no seu miniaplicativo, adicione a dependência FinAppletWXExt ao podfile

Nota

Ao usar FinAppletWXExt , é preciso seguir o WeChat Guia de acesso- Guia de acesso a iOS (opens new window) para configuração, como segue abaixo

  1. Configure Universal Links do aplicativo
  2. Ativar Associated Domains e adicionar o nome do domínio do Universal Links à configuração
  3. No alvo do projeto -> [Info]-> [Tipos de URL], adicione um novo URL schemes (chave para o WeChat, valor para wx+Appid aplicado no WeChat)
  4. Adicione a lista de permissões LSApplicationQueriesSchemes de acesso do aplicativo ao info.plist do projeto, correspondendo aos valores a serem preenchidos como Phiz, weixin, weixinULAPI. Lembre-se de verificar os Domínios Associados na Configuração do ID do Aplicativo no Centro de Desenvolvedores da Apple.

No diretório raiz do projeto Xcode, crie um novo arquivo Podfile e adicione a dependência no SDK do applet no arquivo Podfile do seguinte modo:

objectivec
pod 'FinApplet'
pod 'FinAppletExt'
pod 'FinAppletBDMap'
pod 'FinAppletGDMap'
pod 'FinAppletWebRTC'
pod 'FinAppletBLE'
pod 'FinAppletAgoraRTC'
pod 'FinAppletContact'
pod 'FinAppletClipBoard'
pod 'FinAppletWXExt'

Exemplo de podfile.

objectivec
platform :ios,  "9.0" 
inhibit_all_warnings!
target  "FinoAppletDemo"  do
 pod 'FinApplet'
end
post_install do |installer|
 installer.pods_project.targets.each do |target|
 target.build_configurations.each do |config|
 config.build_settings['ENABLE_STRICT_OBJC_MSGSEND'] = 
'NO'
 config.build_settings['APPLICATION_EXTENSION_API_ONLY'] 
= 'NO'
 end
 end
end

2.1.3 Instalação ou atualização de dependências

Em seguida, execute o comando pod update ou pod install

2.1.4 Abrindo um projeto

Depois de executar pod update ordenado pod install , Abra o projeto Diretório, encontre o xxx.xcworkspace Arquivo e clique duas vezes para abrir ISTO.

2.2 Integração manual

Para facilitar o início rápido e uso do emulador para desenvolvimento e depuração, nosso SDK inclui a arquitetura x86_64. Certifique-se de remover a arquitetura x86_64 antes de disponibilizar o aplicativo na App Store. Você pode removê-la manualmente, encontrar um script online para removê-la ou configurar um script para o seu projeto de acordo com 3.2.4. Ainda é possível usar o simulador para desenvolvimento e depuração, mas ao arquivar, a arquitetura do simulador será removida automaticamente. Claro, você também pode especificar que precisa apenas da arquitetura da máquina real, e entregaremos o SDK apenas com essa arquitetura

Nota

Como os mapas Baidu e Gaode ambos são bibliotecas estáticas, então FinAppletBDMap (Baidu Map) ou FinAppletGDMap (Gaode Map) também é uma biblioteca estática

2.2.1 Etapas de integração

2.2.1.1 Adição de SDK ao projeto

Arraste o final.framework para o projeto.
image.png Claro, se você precisar usar as APIs em FinAppletExt, FinAppletWebRTC, FinAppletBLE, FinAppletAgoraRTC, FinAppletContact, então você ainda precisa adicionar oFinAppletExt. framework , FinAppletWebRTC.framework, FinAppletBLE.framework, FinAppletAgoraRTC.framework, FinAppletContact.framework, FinAppletClipBoard.framework arrastando até o projeto.

2.2.1.2 Modificação de configuração do projeto

Se desejar usar a mesma configuração, siga os seguintes passos:
image.png Se você precisar usar FinAppletExt , FinAppletWebRTC , FinAppletBLE , FinAppletAgoraRTC , FinAppletContact , FinAppletClipBoard , FinAppletGDMap framework , FinAppletBDMap.framework , então você ainda precisa adicionar o correspondente framework ao Copy Files também.

Nota

  1. O framework FinAppletWebRTC é um pacote secundário baseado na biblioteca WebRTC da Google, então você também precisa importar a biblioteca GoogleWebRTC (requer internet científica Acesso), Se não conseguir fazer o download devido a problemas de rede, você também pode baixar a biblioteca GoogleWebRTC(abre em nova janela).
  2. O framework FinAppletGDMap é um pacote secundário baseado no SDK de Mapa Gaode. A integração requer a importação dos SDKs Gaode Map AMap3DMap-NO-IDFA, AMapLocation-NO-IDFA, AMapSearch-NO-IDFA, que são 3 SDKs. A versão 2.37.9 e acima pode usar a última versão 9.40, enquanto as versões anteriores à 2.37.9 precisam usar a versão Gaode Map 9.4.0. Você pode acessar o site oficial do Gaode Map para baixar os SDKs relevantes .
  3. O framework FinAppletBDMap é um pacote secundário baseado no SDK de Mapa Baidu. É necessário integrar e importar os 3 SDKs BMKLocationKit, BaiduMapKit/Map e BaiduMapKit/Search. Você pode acessar osite oficial do Baidu Map (abre em nova janela) para baixar os SDKs relevantes
  4. FinAppletAgoraRTC.framework É um pacote secundário baseado No sdk do SoundNet, o branco pode ser dobrado na SoundNet e importado para o projeto.
  5. O framework FinAppletAgoraRTC é um pacote secundário baseado no SDK da SoundNet, que pode ser baixado do WeChat Open Platform (abre em nova janela) e importado para o projeto.

2.2.1.3 Opening the project

Clique duas vezes xxxx.xcodeproj Para abrir o projeto.

2.2.1.4 Configuring the archive script

O Applet SDK inclui um x86_64 Arquitetura para nos permitir Debug com o emulador quando desenvolvido. No entanto, os Thes SDK com o x86_64 A arquitetura relatará um erro ao embalar e Enviando para o mercado de aplicativos, então configurou um script que Automática remove a arquitetura do emulador ao embalagem Nos permitirá desenvolver e depurar com o emulador e Envie -se ao mercado de aplicativos corretamente. Claro, você também pode nos pedir um SDK que não inclua um emulador.
image.png
image.png O script é o seguinte.

objectivec
#! /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" 
done

Atenção. Se, após a integração, você executar o simulador e receber o seguinte erro: Building for iOS Simulator, but the linked and embedded framework 'FinApplet.framework' was built for iOS + iOS Simulator, então você precisa modificá-lo da seguinte forma Solução: Após alterar Validate Workspace para Yes, como mostrado abaixo, ele será recompilado e passará; depois disso, você pode voltar a alterar para NO e não relatará mais um erro. ! imagem.jpg image.jpg

2.3 Integração de projeto Swift com bibliotecas de terceiros em Objective-C

Se o seu projeto estiver escrito em Swift, integração com bibliotecas OC de terceiros requer configuração adicional

  1. Se um arquivo OC nunca foi adiconado no seu projeto, quando você criar um novo arquivo OC, será perguntado se o arquivo bridge será geradao automaticamente. Clique em Create Bridge Header para gerar o arquivo de cabeçalho image.jpg
  2. Se o seu projeto foi adicionado aos arquivos OC, mas nenhum arquivo de ponte foi gerado, você precisa criar um novo cabeçalho manualmente, com o nome "{target name-Bridging-Header.h}" , ex.: "SwiftDemo-Bridging-Header.h" E nas configurações de compilação (Build Settings) no alvo (target) do projeto, procure pela opção Objective-C Bridging Header e defina isso para o arquivo .h que você acabou de criar, por exemplo, "SwiftDemo/SwiftDemo-Bridging-Header.h" (onde SwiftDemo é o nome do alvo) image.jpg
  3. Adicione uma linha de código a este arquivo.
objectivec
#include <FinApplet/FinApplet.h>

E então o projeto Swift pode utilizar

3. Adicionar descrição de permissão

Integrar o SDK responsivo de acordo com suas atuais necessidades e adicionar configurações de permissões ao arquivo info.plist do projeto
Se você integrar todos os SDKs, as permissões que precisam ser incluídas são: galeria de fotos, câmera, microfone, localização, Bluetooth

Nome da permissãoChave de permissão
Leitura do álbumNsphotolibraryUsagescriping
Escrita do álbumNsphotolibraryAddUsagescriping
CâmeraNscameragedescriping
MicrofoneNsmicrophoneUsagedEscript
LocalizaçãoNSLocationAlwaysAndWhenInUseUsageDescription, NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescription
BluetoothNSBluetoothAlwaysUsageDescription, NSBluetoothPeripheralUsageDescription
Agenda de contatosNScontActSusagedEcting

As permissões envolvidas em cada um desses SDKs são as seguintes (você pode optar por integrá-las conforme apropriado), sendo que o SDK principal (FinApplet) está relacionado com as permissões: of which the core SDK (FinApplet) is involved in the permissions:

Nome da permissãoChave de permissãoAPI da permissão
Leitura de álbumNSPhotoLibraryUsageDescriptionchooseImage, chooseVideo
Escritura do álbumNSPhotoLibraryAddUsageDescriptionsaveImageToPhotosAlbum, saveVideoToPhotosAlbum
CâmeraNSCameraUsageDescriptionscanCode, chooseImage, chooseVideo, CameraContext(Camera component)
MicrofoneNSMicrophoneUsageDescriptionchooseVideo,CameraContext(Camera component)

Nota

Ao gravar um vídeo, o sistema acessa as permissões da câmera e do microfone por sua vez

Permissões envolvidas na extensão SDK (FinAppletExt):

Nome da permissãoChave de permissãoAPI da permissão
MicrofoneNSMicrophoneUsageDescriptionstartRecord, RecorderManager
LocalizaçãoNSLocationAlwaysAndWhenInUseUsageDescription, NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescriptionchooseLocation, getLocation, openLocation, choosePoi

Extensão SDK-Permissões WebRTC (FINAPPletwebrtc) Envolvido:

Nome da permissãoChave de permissãoAPI da permissão
CâmeraNscameragedescripingwebrtc-video component
MicrofoneNsmicrophoneUsagedEscriptwebrtc-vídeo componente

Extension SDK-BDMap (FinAppletBDMap) permissions involved:

Nome da permissãoChave de permissãoAPI da permissão
LocalizaçãoNSLocationAlwaysAndWhenInUseUsageDescription, NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescriptionComponente do mapa

Extension SDK-GDMap (FinAppletGDMap) permissions involved:

Nome da permissãoChave de permissãoAPI da permissão
LocalizaçãoNSLocationAlwaysAndWhenInUseUsageDescription, NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescriptionComponente do mapa

Permissions involved in the extension SDK-BLE (FinAppletBLE):

Nome da permissãoChave de permissãoAPI da permissão
BluetoothNSBluetoothAlwaysUsageDescription, NSBluetoothPeripheralUsageDescriptionBluetooth-General, Bluetooth-Low Power Central Device, Bluetooth-Low Power Peripheral Device, Bluetooth-Beacon some api

Permissões envolvidas na extensão SDK-AgoraRTC (FinAppletAgoraRTC):

Nome da permissãoKEY of PermissionAPI of Permission
CâmeraNSCameraUsageDescriptionlive-pusher,live-player Componente
MicrofoneNSMicrophoneUsageDescriptionlive-pusher,live-player Componente

Permissões SDK-Contact (FinAppletContact) envolvidas:

Nome da permissãoKEY of PermissionAPI of Permission
Agenda de contatosNSContactsUsageDescriptionaddPhoneContact

Nota

Se você já tem essas permissões configuradas em seu projeto, não é preciso adicionar novamente

Além disso, se o seu applet tiver solicitações ou páginas que usam o http Protocolo, você também vai configurar os parâmetros a seguir em Seu projecto.

objectivec
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

Isto é, [Configurações de segurança de transporte de aplicativos]-> [Permitir cargas arbitrárias] está definido como sim.

4. Adicionar o tipo de URL

Nota

As etapas 4 e 7 não são necessárias, se o seu aplicativo abrirá applets em seu Aplicativo através de outros aplicativos (Safari, Phiz, etc.), depois as etapas 4 e 7 devem ser configurado.

Selecione o destino-> -> [Info] -> [URL Types] e adicione um novo esquema de URL (Os esquemas de URL estão no formato de gordura + md5 de sdkkey.)

A chave SDK é gerada pela primeira vez como 16-Bit Md5 Bittase MD5 e depois prefixado com fat .
image.jpg
Para mais informações de como usá-lo, consulte Open applet using routed form.

5. Adicionando cabeçalhos SDK

Onde é necessário o applet phizdclip sdk, adicione o código a seguir.

objectivec
#import <FinApplet/FinApplet.h>

Se o SDK de extensão também for integrado, o código a seguir será adicionado para ligar para a API no sdk de extensão.

objectivec
#import <FinAppletExt/FinAppletExt.h>

Para utilizar o SDK do Baidu Maps encapsulado, o seguinte código também será adicionado

objectivec
#import <FinAppletBDMap/FinAppletBDMap.h>

Se você deseja usar o SDK encapsulado do Gaode Map, também será necessário adicionar o seguinte código

objectivec
#import <FinAppletGDMap/FinAppletGDMap.h>

Se você deseja usar a biblioteca WebRTC encapsulada, também será necessário adicionar o seguinte código

objectivec
#import <FinAppletWebRTC/FinAppletWebRTC.h>

Se a biblioteca Bluetooth for necessária, será necessário adicionar o seguinte código

objectivec
#import <FinAppletBLE/FinAppletBLE.h>

Se você precisar utilizar o SDK encapsulado do SoundNet, também será necessário adicionar o seguinte código

objectivec
#import <FinAppletAgoraRTC/FinAppletAgoraRTC.h>

Se um SDK de contato encapsulado for necessário, também é preciso adicionar o seguinte código:

objectivec
#import <FinAppletContact/FinAppletContact.h>

Se um SDK de área de transfência encapsulado for necessário, o seguinte código também deve ser adicionado:

objectivec
#import <FinAppletClipBoard/FinAppletClipBoard.h>

Se for necessário usar o SDK de extensão Phiz encapsulado, o seguinte código também deve ser adicionado:

objectivec
#import <FinAppletWXExt/FinAppletWXExt.h>

A maneira mais conveniente de fazer isso é adicionar o código acima ao arquivo pch, assim não precisa ser citado ao usá-lo

6. Inicializando o SDK

Chame os métodos de inicialização do SDK nos seguintes métodos no AppDelegate do projeto

Nota

A partir da versão 2.13.109, o SDK PhizClip applet passa a oferecer suporte à configuração de vários servidores, permitindo que você abra applets em diversos servidores simultaneamente. Portanto, o método de inicialização foi alterado. Você pode escrever as informações de configuração do servidor em um arquivo plist e inicializá-lo conforme mostrado no exemplo abaixo

objectivec
NSString *plistPath = [[NSBundle mainBundle] 
pathForResource:@ "servers"  ofType:@ "plist" ];
NSArray *array = [NSArray arrayWithContentsOfFile:plistPath];
NSMutableArray *storeArrayM = [NSMutableArray array];
for (NSDictionary *dict in array) {
 FATStoreConfig *storeConfig = [[FATStoreConfig alloc] init];
 storeConfig.sdkKey = dict[@ "sdkKey" ];
 storeConfig.sdkSecret = dict[@ "sdkSecret" ];
 storeConfig.apiServer = dict[@ "apiServer" ];
 storeConfig.apmServer = dict[@ "apmServer" ];
 if ([@ "SM"  isEqualToString:dict[@ "cryptType" ]]) {
 storeConfig.cryptType = FATApiCryptTypeSM;
 } else {
 storeConfig.cryptType = FATApiCryptTypeMD5;
 }
 
 [storeArrayM addObject:storeConfig];
}
FATConfig *config = [FATConfig 
configWithStoreConfigs:storeArrayM];
[[FATClient sharedClient] initWithConfig:config error:nil];

Também pode ser inicializado da seguinte forma:

objectivec
NSMutableArray *storeArrayM = [NSMutableArray array];
FATStoreConfig *storeConfig = [[FATStoreConfig alloc] init];
storeConfig.sdkKey = @ "Your sdkKey information" ;
storeConfig.sdkSecret = @ "Your sdkSecret information" ;
storeConfig.apiServer = @ "ServerDomain" ;
storeConfig.apmServer = @ "Domain for apm statistics events" ;
[storeArrayM addObject:storeConfig];
 
FATStoreConfig *storeConfig2 = [[FATStoreConfig alloc] init];
storeConfig2.sdkKey = @ "Your sdkKey information" ;
storeConfig2.sdkSecret = @ "Your sdkSecret information" ;
storeConfig2.apiServer = @ "ServerDomain" ;
storeConfig2.apmServer = @ "Domain for apm statistics events" ;
storeConfig2.cryptType = FATApiCryptTypeSM;
[storeArrayM addObject:storeConfig2];
FATConfig *config = [FATConfig 
configWithStoreConfigs:storeArrayM];
[[FATClient sharedClient] initWithConfig:config error:nil];

Quando você precisa utilizar o Baidu Map/Gaode Map para implementar as funções do componente de MAPA, é necessário acessar a plataforma correspondente para solicitar uma CHAVE (KEY) e inicializá-la

swift
// Preparing the map sdk for initialisation
[FATBDMapComponent setBDMapAppKey:@ "requested key" ]
[FATGDMapComponent setGDMapAppKey:@ "requested key" ]

Quando é necessária a funcionalidade de um componente WebRTC, é necessário realizar o registro inicial do componente

objectivec
// WebRTC initialisation
[FATWebRTCComponent registerComponent]

Quando a funcionalidade do componente AgoraRTC é requerida, um registro inicial do componente é necessário

objectivec
// AgoraRTC initialisation
[FATAgoraRTCComponent registerComponent]

Quando é necessária a funcionalidade da API addPhoneContact

objectivec
// ContactSDK initialisation
[FATContactComponent registerComponent]

Quando a funcionalidade das APIs getClipboardData, setClipboardData são requeridas, um registro inicial do componente é necessário

objectivec
// ClipBoard initialisation
[FATClipBoardComponent registerComponent];

Quando é necessário utilizar as funcionalidades de pagamento, login e obter informações do usuário do Phiz, é preciso inicializar o componente de registro

objectivec
// Phiz Extension SDL Initialization
[FATWXExtComponent registerComponent:@ "Phizappid"  
universalLink:@ "universalLink" ];

E adicione o seguinte código ao AppDelegate.m

objectivec
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url 
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> 
*)options {
 /* Phiz login and share */
 if ([WXApi handleOpenURL:url delegate:[FATWXApiManager 
sharedManager]]) {
 return YES;
 }
 return YES;
}
// Before iOS 9.0
- (BOOL)application:(UIApplication *)application openURL:(NSURL 
*)url sourceApplication:(NSString *)sourceApplication annotation:(id)
annotation{
 /* Phiz login and share */
 //  `WeChatHandleURLDelegate `  for  `WXApiDelegate`  proxy file
 if ([WXApi handleOpenURL:url delegate:[FATWXApiManager 
sharedManager]]) {
 return YES;
 }
 return YES;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:
(NSURL *)url{
 /* Phiz login and share */
 if ([WXApi handleOpenURL:url delegate:[FATWXApiManager 
sharedManager]]) {
 return YES;
 }
 return YES;
}
- (BOOL)application:(UIApplication *)application 
continueUserActivity:(NSUserActivity *)userActivity 
restorationHandler:(void (^)
( NSArray<id<UIUserActivityRestoring>> * 
_Nullable))restorationHandler {
 return [WXApi handleOpenUniversalLink:userActivity delegate:
[FATWXApiManager sharedManager]];
}

Nota

Para utilizar o Phiz Extension SDK, é necessário garantir que a versão do SDK principal seja 2.37.13 ou superior

Nota

Como o FinAppletWXExt precisa substituir os métodos relacionados ao open-type no buttonOpenTypeDelegate (FATAppletDelegate nas versões anteriores à 2.37.13), especificamente os métodos chooseAvatar, contact, feedback, getPhoneNumber, launchApp e shareAppMessage. Então, se você implementou buttonOpenTypeDelegate e os seis métodos mencionados, o FinAppletWXExt assumirá o getPhoneNumber, os outros cinco métodos devem ser migrados da seguinte forma

Se você não implementou buttonOpenTypeDelegate ou não utiliza os seis métodos mencionados, você pode ignorar este passo. Caso precise integrar o FinAppletWXExt e implementar métodos relacionados ao open-type, por favor, siga as instruções a seguir.

  1. Após a inicialização bem-sucedida do SDK principal e do Phiz extension SDK, configure a classe de implementação do seu método de proxy
[FATDelegateClientHelper sharedHelper].buttonOpenTypeDelegate 
= [FINWXButtonDelegate sharedHelper];
  1. Implementar o método de proxy de ButtonOpentypelegate
- (BOOL)forwardAppletWithInfo:(NSDictionary *)contentInfo 
completion:(void (^)(FATExtensionCode code, NSDictionary 
*result))completion {
 return YES;
}
- (BOOL)getUserInfoWithAppletInfo:(FATAppletInfo *)appletInfo 
bindGetUserInfo:(void (^)(NSDictionary *result))bindGetUserInfo {
 return YES;
}
- (BOOL)contactWithAppletInfo:(FATAppletInfo *)appletInfo 
sessionFrom:(NSString *)sessionFrom sendMessageTitle:(NSString *)
sendMessageTitle sendMessagePath:(NSString *)sendMessagePath 
sendMessageImg:(NSString *)sendMessageImg showMessageCard:
(BOOL) showMessageCard {
 return YES;
}
- (BOOL)getPhoneNumberWithAppletInfo:(FATAppletInfo *)appletInfo
bindGetPhoneNumber:(void (^)(NSDictionary 
*result))bindGetPhoneNumber {
 NSLog(@ "AppletInfo:%@" , appletInfo);
 return YES;
}
- (BOOL)launchAppWithAppletInfo:(FATAppletInfo *)appletInfo 
appParameter:(NSString *)appParameter bindError:(void (^)
(NSDictionary * result))bindError bindLaunchApp:(void (^)
(NSDictionary *result))bindLaunchApp {
 return YES;
}
- (BOOL)feedbackWithAppletInfo:(FATAppletInfo *)appletInfo {
 return YES;
}
- (BOOL)chooseAvatarWithAppletInfo:(FATAppletInfo *)appletInfo 
bindChooseAvatar:(void (^)(NSDictionary *result))bindChooseAvatar
{
 return YES;
}

A biblioteca Bluetooth não precisa ser inicializada, sendo apenas referenciada no projeto por meio de um arquivo de cabeçalho

Nota

A partir da versão 2.21.1 e posterior, não é mais necessário chamar a configuração do extension SDK; o SDK determinará automaticamente internamente se o extension SDK está integrado e acionará automaticamente a configuração do extension SDK

Claro, se você precisar utilizar a API no extension SDK, também será necessário configurar a extensão da API após a inicialização do SDK. Basta chamar o seguinte código uma vez.

objectivec
// Preparing the extension api
[[FATExtClient sharedClient] fat_prepareExtensionApis];

Nota

Se currentUserId não estiver definido, os dados em cache serão armazenados no diretório padrão, e ao obter a lista de applets recentemente abertos, você obterá os applets no diretório padrão. Se desejar que usuários diferentes usem diretórios de cache diferentes, por favor, defina diferentes currentUserIds para usuários diferentes.

7. Manuseio do HandleOpenurl

O applet suporta a abertura externa do applet através de um link, que Precisa ser feito da seguinte forma.

objectivec
- (BOOL)application:(UIApplication *)application openURL:(NSURL 
*)url sourceApplication:(NSString *)sourceApplication annotation:(id)
annotation
{
 if ([[FATClient sharedClient] handleOpenURL:url]) {
 return YES;
 }
 return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url 
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> 
*)options
{
 if ([[FATClient sharedClient] handleOpenURL:url]) {
 return YES;
 }
 return YES;
}

8. Abra o applet

objectivec
FATAppletRequest *request = [[FATAppletRequest alloc] init];
request.appletId = @ "applet id" ;
request.apiServer = @ "server address" ;
request.transitionStyle = FATTranstionStyleUp;
request.startParams = startParams;
 
[[FATClient sharedClient] startAppletWithRequest:request 
InParentViewController:self completion:^(BOOL result, FATError 
*error) {
 NSLog(@ "Open applet: %@" , error);
} closeCompletion:^{
 NSLog(@ "Close applet" );
}];

Para outras descrições de API do SDK PhizClip applet, consulte a documentação da API

9. SDK estendido

Instruções rápidas de integração para usar o SDK estendido, consulte [Integração SDK] acima para detalhes sobre como usá-lo (#_2-integration sdk)

9.1 SDK de extensão Phiz

Acesso rápido ao SDK Phiz oferece a capacidade de chamar o Phiz para obter login, informações do usuário, número de telefone e pagamento através do applet Phiz. Método de integração simplificado.

objectivec
pod 'FinAppletWXExt'

Nota

Quando estiver utilizando o FinAppletWXExt, é necessário seguir o Guia de Acesso ao WeChat - Guia de Acesso para iOS para a configuração, conforme a seguir.

  1. Configure os Universal Links do aplicativo .
  2. Ative a opção Associated Domains e adicione o nome de domínio 'Universal Links' à configuração
  3. No Target do projeto -> [Informações] -> [Tipos de URL], adicione um novo Esquema de URL (chave para WeChat, valor para wx+Appid aplicado no WeChat)
  4. Adicione a lista LSApplicationQueriesSchemes de permissões de acesso do aplicativo ao info.plist do projeto, correspondendo aos valores Phiz, weixin e weixinULAPI a serem preenchidos. Lembre-se de verificar os Domínios Associados na Configuração do ID do Aplicativo no Centro de Desenvolvedores da Apple.

Para inicializar o componente de registro.

objectivec
// Phiz Extension SDL Initialization
[FATWXExtComponent registerComponent:@ "Phizappid"  
universalLink:@ "universalLink" ];

Adicione o seguinte código ao AppDelegate.m

objectivec
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url 
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> 
*)options {
 /* Phiz login and share */
 if ([WXApi handleOpenURL:url delegate:[FATWXApiManager 
sharedManager]]) {
 return YES;
 }
 return YES;
}
// Before iOS 9.0
- (BOOL)application:(UIApplication *)application openURL:(NSURL 
*)url sourceApplication:(NSString *)sourceApplication annotation:(id)
annotation{
 /* Phiz login and share */
 //  `WeChatHandleURLDelegate `  for  `WXApiDelegate`  proxy file
 if ([WXApi handleOpenURL:url delegate:[FATWXApiManager 
sharedManager]]) {
 return YES;
 }
 return YES;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:
(NSURL *)url{
 /* Phiz login and share */
 if ([WXApi handleOpenURL:url delegate:[FATWXApiManager 
sharedManager]]) {
 return YES;
 }
 return YES;
}
- (BOOL)application:(UIApplication *)application 
continueUserActivity:(NSUserActivity *)userActivity 
restorationHandler:(void (^)
( NSArray<id<UIUserActivityRestoring>> * 
_Nullable))restorationHandler {
 return [WXApi handleOpenUniversalLink:userActivity delegate:
[FATWXApiManager sharedManager]];
}

Nota

Para usar o Phiz Extension SDK, você deve garantir que o núcleo A versão SDK é 2.37.13 Ou acima.

Nota

A FinAppletWXExt precisa substituir os métodos relacionados ao tipo de abertura (open-type) no buttonOpenTypeDelegate (FATAppletDelegate nas versões anteriores à 2.37.13), especificamente os métodos chooseAvatar, contact, feedback, getPhoneNumber, launchApp e shareAppMessage. getPhoneNumber, launchApp e shareAppMessage. Portanto, se você implementou buttonOpenTypeDelegate e os seis métodos mencionados, FinAppletWXExt assumirá o getPhoneNumber, os outros cinco métodos devem ser migrados da seguinte forma. Se você não implementou buttonOpenTypeDelegate ou não utiliza os seis métodos mencionados, pode ignorar este passo. Caso precise integrar o FinAppletWXExt e implementar métodos relacionados ao tipo de abertura, por favor, consulte as instruções a seguir

  1. Após a inicialização bem-sucedida do SDK principal e do SDK de extensão Phiz, configure a classe de implementação dos seus métodos de proxy.
[FATDelegateClientHelper sharedHelper].buttonOpenTypeDelegate 
= [FINWXButtonDelegate sharedHelper];
  1. Implemente o método de proxy do buttonOpenTypeDelegate
- (BOOL)forwardAppletWithInfo:(NSDictionary *)contentInfo 
completion:(void (^)(FATExtensionCode code, NSDictionary 
*result))completion {
 return YES;
}
- (BOOL)getUserInfoWithAppletInfo:(FATAppletInfo *)appletInfo 
bindGetUserInfo:(void (^)(NSDictionary *result))bindGetUserInfo {
 return YES;
}
- (BOOL)contactWithAppletInfo:(FATAppletInfo *)appletInfo 
sessionFrom:(NSString *)sessionFrom sendMessageTitle:(NSString *)
sendMessageTitle sendMessagePath:(NSString *)sendMessagePath 
sendMessageImg:(NSString *)sendMessageImg showMessageCard:
(BOOL) showMessageCard {
 return YES;
}
- (BOOL)getPhoneNumberWithAppletInfo:(FATAppletInfo *)appletInfo
bindGetPhoneNumber:(void (^)(NSDictionary 
*result))bindGetPhoneNumber {
 NSLog(@ "AppletInfo:%@" , appletInfo);
 return YES;
}
- (BOOL)launchAppWithAppletInfo:(FATAppletInfo *)appletInfo 
appParameter:(NSString *)appParameter bindError:(void (^)
(NSDictionary * result))bindError bindLaunchApp:(void (^)
(NSDictionary *result))bindLaunchApp {
 return YES;
}
- (BOOL)feedbackWithAppletInfo:(FATAppletInfo *)appletInfo {
 return YES;
}
- (BOOL)chooseAvatarWithAppletInfo:(FATAppletInfo *)appletInfo 
bindChooseAvatar:(void (^)(NSDictionary *result))bindChooseAvatar
{
 return YES;
}

9.2 Extensão de mapa SDK

Quando estiver utilizando a funcionalidade do componente de mapa, você pode fazer referência ao FinAppletBDMap (Baidu Map) ou FinAppletGDMap (Gaode Map) se desejar usar um mapa de terceiros para implementação, ou por padrão pelo FinAppletExt (mapa nativo). Método de integração simplificado.

objectivec
#pod 'FinAppletBDMap'
#pod 'FinAppletGDMap' // Just select a release
pod 'FinAppletExt'

Para inicializar o componente de registro. Quando você precisa usar o Baidu Map/Gaode Map para implementar as funções do componente de MAPA, é necessário acessar a plataforma correspondente para solicitar uma CHAVE e inicializá-la.

objectivec
#import <FinAppletExt/FinAppletExt.h>
// Introduce the corresponding header files as you see fit
#import <FinAppletBDMap/FinAppletBDMap.h>
#import <FinAppletGDMap/FinAppletGDMap.h>
objectivec
// Preparing the map sdk for initialisation
// Initialize the map accordingly to your situation
[FATBDMapComponent setBDMapAppKey:@ "requested key" ]
[FATGDMapComponent setGDMapAppKey:@ "requested key" ]

9.3 SDK de extensão Bluetooth

Se você precisa usar a funcionalidade Bluetooth no seu applet, pode introduzir o SDK de Extensão Bluetooth. Método de integração simplificado

objectivec
pod 'FinAppletBLE'

O SDK Bluetooth não precisa ser inicializado, apenas introduza o arquivo de cabeçalho.

objectivec
#import <FinAppletBLE/FinAppletBLE.h>

9.4 Extensão do SoundNet SDK

Se você precisa usar as funções de live-pusher e live-player no seu applet, pode introduzir o SDK SoundNet. Método de integração simplificado.

objectivec
pod 'FinAppletAgoraRTC'

Para inicializar o componente de registro.

objectivec
#import <FinAppletAgoraRTC/FinAppletAgoraRTC.h>
objectivec
// AgoraRTC initialisation
[FATAgoraRTCComponent registerComponent]

9.5 SDK de extensão WebRTC

Se você for preciso utilizar a funcionalidade WebRTC no seu applet, pode introduzir o SDK WebRTC. Método de integração simplificado

objectivec
pod 'FinAppletWebRTC'

Para inicializar o componente de registro.

objectivec
#import <FinAppletWebRTC/FinAppletWebRTC.h>
objectivec
// WebRTC initialisation
[FATWebRTCComponent registerComponent]

9.6 SDK de extensão de contatos

Se você precisa utilizar o addPhoneContact no applet para adicionar contatos à agenda telefônica do seu telefone, pode incorporar o SDK de Contatos. Método de integração simplificado

objectivec
pod 'FinAppletContact'

Para inicializar o componente de registro.

objectivec
#import <FinAppletContact/FinAppletContact.h>
objectivec
// ContactSDK initialisation
[FATContactComponent registerComponent]

9,7 SDK de extensão da área de referência

Se você precisa usar a função de área de transferência no seu applet, pode introduzir o SDK da área de transferência. Método de integração simplificado

objectivec
pod 'FinAppletClipBoard'

Para inicializar o componente de registro.

objectivec
#import <FinAppletClipBoard/FinAppletClipBoard.h>
objectivec
// ClipBoard initialisation
[FATClipBoardComponent registerComponent];