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
"

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;
!
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).
sudo gem install cocoapods
pod setup2.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)ouFINAPLETGDMAP (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
FINAPLETWEBRTCaopodfile, 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
FinAppletBLEaopodfile - Se as funcionalidades live-pusher, live player forem requeridas no miniaplicativo, adicione a dependência
FinAppletAgoraRTCaopodfile - Se for preciso usar addPhoneContact no miniaplicativo para adicionar contatos, adicione a dependência
FinAppletContactaopodfile - Se a funcionalidade da área de transferência for necessária no applet, adicione o
FinAppletClipBoarddependência para opodfile - 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
FinAppletWXExtaopodfile
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
- Configure
Universal Linksdo aplicativo - Ativar
Associated Domainse adicionar o nome do domínio doUniversal Linksà configuração - No alvo do projeto -> [Info]-> [Tipos de URL], adicione um novo URL schemes (chave para o WeChat, valor para wx+Appid aplicado no WeChat)
- Adicione a lista de permissões
LSApplicationQueriesSchemesde acesso do aplicativo aoinfo.plistdo projeto, correspondendo aos valores a serem preenchidos como Phiz, weixin, weixinULAPI. Lembre-se de verificar osDomínios AssociadosnaConfiguração do ID do Aplicativono 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:
pod 'FinApplet'
pod 'FinAppletExt'
pod 'FinAppletBDMap'
pod 'FinAppletGDMap'
pod 'FinAppletWebRTC'
pod 'FinAppletBLE'
pod 'FinAppletAgoraRTC'
pod 'FinAppletContact'
pod 'FinAppletClipBoard'
pod 'FinAppletWXExt'Exemplo de podfile.
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
end2.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.
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:
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
- 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). - 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ão2.37.9e acima pode usar a última versão9.40, enquanto as versões anteriores à2.37.9precisam usar a versão Gaode Map9.4.0. Você pode acessar o site oficial do Gaode Map para baixar os SDKs relevantes . - O
framework FinAppletBDMapé um pacote secundário baseado no SDK de Mapa Baidu. É necessário integrar e importar os 3 SDKsBMKLocationKit,BaiduMapKit/MapeBaiduMapKit/Search. Você pode acessar osite oficial do Baidu Map (abre em nova janela) para baixar os SDKs relevantes FinAppletAgoraRTC.frameworkÉ um pacote secundário baseado No sdk do SoundNet, o branco pode ser dobrado na SoundNet e importado para o projeto.- 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.
O script é 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"
doneAtençã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 
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
- 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 Headerpara gerar o arquivo de cabeçalho
- 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)
- Adicione uma linha de código a este arquivo.
#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ão | Chave de permissão |
|---|---|
| Leitura do álbum | NsphotolibraryUsagescriping |
| Escrita do álbum | NsphotolibraryAddUsagescriping |
| Câmera | Nscameragedescriping |
| Microfone | NsmicrophoneUsagedEscript |
| Localização | NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescription |
| Bluetooth | NSBluetoothAlwaysUsageDescription, NSBluetoothPeripheralUsageDescription |
| Agenda de contatos | NScontActSusagedEcting |
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ão | Chave de permissão | API da permissão |
|---|---|---|
| Leitura de álbum | NSPhotoLibraryUsageDescription | chooseImage, chooseVideo |
| Escritura do álbum | NSPhotoLibraryAddUsageDescription | saveImageToPhotosAlbum, saveVideoToPhotosAlbum |
| Câmera | NSCameraUsageDescription | scanCode, chooseImage, chooseVideo, CameraContext(Camera component) |
| Microfone | NSMicrophoneUsageDescription | chooseVideo,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ão | Chave de permissão | API da permissão |
|---|---|---|
| Microfone | NSMicrophoneUsageDescription | startRecord, RecorderManager |
| Localização | NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescription | chooseLocation, getLocation, openLocation, choosePoi |
Extensão SDK-Permissões WebRTC (FINAPPletwebrtc) Envolvido:
| Nome da permissão | Chave de permissão | API da permissão |
|---|---|---|
| Câmera | Nscameragedescriping | webrtc-video component |
| Microfone | NsmicrophoneUsagedEscript | webrtc-vídeo componente |
Extension SDK-BDMap (FinAppletBDMap) permissions involved:
| Nome da permissão | Chave de permissão | API da permissão |
|---|---|---|
| Localização | NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescription | Componente do mapa |
Extension SDK-GDMap (FinAppletGDMap) permissions involved:
| Nome da permissão | Chave de permissão | API da permissão |
|---|---|---|
| Localização | NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescription | Componente do mapa |
Permissions involved in the extension SDK-BLE (FinAppletBLE):
| Nome da permissão | Chave de permissão | API da permissão |
|---|---|---|
| Bluetooth | NSBluetoothAlwaysUsageDescription, NSBluetoothPeripheralUsageDescription | Bluetooth-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ão | KEY of Permission | API of Permission |
|---|---|---|
| Câmera | NSCameraUsageDescription | live-pusher,live-player Componente |
| Microfone | NSMicrophoneUsageDescription | live-pusher,live-player Componente |
Permissões SDK-Contact (FinAppletContact) envolvidas:
| Nome da permissão | KEY of Permission | API of Permission |
|---|---|---|
| Agenda de contatos | NSContactsUsageDescription | addPhoneContact |
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.
<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 . 
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.
#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.
#import <FinAppletExt/FinAppletExt.h>Para utilizar o SDK do Baidu Maps encapsulado, o seguinte código também será adicionado
#import <FinAppletBDMap/FinAppletBDMap.h>Se você deseja usar o SDK encapsulado do Gaode Map, também será necessário adicionar o seguinte código
#import <FinAppletGDMap/FinAppletGDMap.h>Se você deseja usar a biblioteca WebRTC encapsulada, também será necessário adicionar o seguinte código
#import <FinAppletWebRTC/FinAppletWebRTC.h>Se a biblioteca Bluetooth for necessária, será necessário adicionar o seguinte código
#import <FinAppletBLE/FinAppletBLE.h>Se você precisar utilizar o SDK encapsulado do SoundNet, também será necessário adicionar o seguinte código
#import <FinAppletAgoraRTC/FinAppletAgoraRTC.h>Se um SDK de contato encapsulado for necessário, também é preciso adicionar o seguinte código:
#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:
#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:
#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
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:
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
// 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
// WebRTC initialisation
[FATWebRTCComponent registerComponent]Quando a funcionalidade do componente AgoraRTC é requerida, um registro inicial do componente é necessário
// AgoraRTC initialisation
[FATAgoraRTCComponent registerComponent]Quando é necessária a funcionalidade da API addPhoneContact
// ContactSDK initialisation
[FATContactComponent registerComponent]Quando a funcionalidade das APIs getClipboardData, setClipboardData são requeridas, um registro inicial do componente é necessário
// 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
// Phiz Extension SDL Initialization
[FATWXExtComponent registerComponent:@ "Phizappid"
universalLink:@ "universalLink" ];E adicione o seguinte código ao AppDelegate.m
- (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.
- 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];- 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.
// 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.
- (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
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.
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.
- Configure os
Universal Linksdo aplicativo . - Ative a opção
Associated Domainse adicione o nome de domínio 'Universal Links' à configuração - 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) - Adicione a lista
LSApplicationQueriesSchemesde permissões de acesso do aplicativo aoinfo.plistdo projeto, correspondendo aos valoresPhiz,weixineweixinULAPIa serem preenchidos. Lembre-se de verificar osDomínios AssociadosnaConfiguração do IDdo Aplicativo no Centro de Desenvolvedores da Apple.
Para inicializar o componente de registro.
// Phiz Extension SDL Initialization
[FATWXExtComponent registerComponent:@ "Phizappid"
universalLink:@ "universalLink" ];Adicione o seguinte código ao AppDelegate.m
- (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
- 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];- 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.
#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.
#import <FinAppletExt/FinAppletExt.h>
// Introduce the corresponding header files as you see fit
#import <FinAppletBDMap/FinAppletBDMap.h>
#import <FinAppletGDMap/FinAppletGDMap.h>// 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
pod 'FinAppletBLE'O SDK Bluetooth não precisa ser inicializado, apenas introduza o arquivo de cabeçalho.
#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.
pod 'FinAppletAgoraRTC'Para inicializar o componente de registro.
#import <FinAppletAgoraRTC/FinAppletAgoraRTC.h>// 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
pod 'FinAppletWebRTC'Para inicializar o componente de registro.
#import <FinAppletWebRTC/FinAppletWebRTC.h>// 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
pod 'FinAppletContact'Para inicializar o componente de registro.
#import <FinAppletContact/FinAppletContact.h>// 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
pod 'FinAppletClipBoard'Para inicializar o componente de registro.
#import <FinAppletClipBoard/FinAppletClipBoard.h>// ClipBoard initialisation
[FATClipBoardComponent registerComponent];