Todos os produtos
Search
Central de documentação

Cloud Phone:iOS SDK

Última atualização: Jul 10, 2026

Integre o iOS SDK do Elastic Cloud Phone ao seu aplicativo para transmitir e interagir com instâncias de cloud phone.

1. Início rápido

1,1 Obter o SDK e a demonstração

Nota

Ao baixar e utilizar o SDK, você concorda com a Política de Privacidade do SDK do Alibaba Cloud Workspace.

Não distribua estes componentes a terceiros sem o consentimento da Alibaba Cloud.

Requisitos de integração

Versão mínima suportada do iOS: 10.0

Devido à disponibilidade das APIs do iOS, os recursos periféricos de mouse e teclado exigem iOS 13.4 ou superior.

Integração do SDK

  1. Descompacte o SDK e copie-o para o seu projeto.

  2. Vincule a biblioteca do SDK.

    Acesse Target --> Build Phases --> Link Binary With Libraries --> + --> Add Other --> Add Files e selecione o framework necessário.

  3. Defina a opção de incorporação.

    Acesse Target --> General --> Frameworks, Libraries, and Embedded Content, localize ASPEngineSDK.framework e selecione Embed Without Signing.

Permissões do SDK

Adicione as permissões necessárias para o ASPEngineSDK ao arquivo Info.plist do seu projeto.

1. Permissão de microfone

Privacy - Microphone Usage Description

2. Permissão de câmera

Privacy - Camera Usage Description

Assinatura do SDK

O SDK é uma biblioteca dinâmica e deve ser assinado para depuração em dispositivos físicos ou para envio à App Store.

  • Obtenha um ID de assinatura

Para encontrar seu ID de assinatura, execute:

security find-identity -v -p codesigning

Caso não possua um certificado local, faça login na sua conta Apple Developer e baixe o perfil de provisionamento. Clique em com o botão direito no arquivo baixado, escolha Get Info e localize o campo SHA-1 do certificado desejado. Este valor corresponde ao ID de assinatura.

  • Signing & Capabilities

No target do seu projeto, configure corretamente o certificado na aba Signing & Capabilities.

  • Adicione um script de shell para assinatura. Este script é obrigatório para dispositivos físicos, mas não para simuladores.

Acesse Target --> Build Phases --> + --> New Run Script Phase e cole o conteúdo do script de shell. Consulte o exemplo de script de assinatura abaixo.

Nota: Esta fase Run Script deve ser posicionada após a fase Embed Frameworks.

  • Exemplo de script de shell para assinatura

set -e
SHELL_PATH="${PROJECT_DIR}/ASPDemo/Lib/ASPEngineSDK/ASPEngineSDK.framework/link_and_sign.sh"
KEY_ID="Your certificate's signing ID"
echo "===> Signing using $KEY_ID"
/bin/bash -c "${SHELL_PATH}"\ "${TARGET_BUILD_DIR}"\ "${FRAMEWORKS_FOLDER_PATH}"\ "${KEY_ID}"

Configuração do projeto

Desative o Bitcode.

Acesse Target --> Build Settings --> Build Options --> Enable Bitcode e defina a opção como No.

1,2 Fluxo de trabalho de integração

image

1,3 Melhores práticas

Consulte Melhores práticas para integração rápida com cloud phones. O diagrama a seguir descreve a arquitetura de integração.

image

Diversos métodos de login podem fornecer o ticket de conexão exigido pelo SDK. O diagrama seguinte ilustra esses fluxos de trabalho.

image

Para exemplos de código, consulte o código de amostra da API de ciclo de vida.

2. API de ciclo de vida

2,1 Inicializar instância

+ (instancetype)buildStreamView;

2,2 Estabelecer conexão

- (void)startWithTicket:(ASPConnTicket*) ticketParam;

Parâmetros de ASPConnTicket:

Parâmetro

Descrição

connTicket

Ticket de conexão para autenticação.

caFilePath

Caminho absoluto para o arquivo CA usado na criptografia TLS.

desktopId

ID da instância do aplicativo, como ai-0cc7s3n1iagyq****. Obtenha este ID chamando a API Query Instance Details.

useVpc

Indica se a conexão será feita via VPC.

enableTls

Ativa a transmissão criptografada. Recomendado: YES.

enableStatistics

Ativa o rastreamento. Recomendado: YES.

preferRtcTransport

Ativa o canal RTC. Recomendado: YES.

2,3 Desconectar

- (int)stop;

2,4 Pausar

Pausa o fluxo proveniente do servidor e a renderização no cliente.

- (void)pause;

2,5 Retomar

Retoma o fluxo proveniente do servidor e a renderização no cliente.

- (void)resume;

2,6 Descartar instância

- (void)dispose;

2,7 Callbacks

// Callbacks for the Elastic Cloud Phone connection.
@property (nonatomic, weak) id<ASPEngineDelegate> engineDelegate;
// Callback for resolution changes.
@property (nonatomic, weak) id<ASPEngineResolutionUpdateDelegate> resolutionUpdateDelegate;
// Callbacks for the mouse cursor.
@property (nonatomic, weak) id<ASPEngineCursorDelegate> cursorDelegate;
// Callback for orientation changes of the Elastic Cloud Phone.
@property (nonatomic, weak) id<ASPEngineOrientationUpdateDelegate> orientationUpdateDelegate;
// Callbacks for tracking.
@property (nonatomic, weak) id<ASPEngineStatisticsDelegate> statisticsDelegate;
// Callbacks for the Input Method Editor (IME). Not supported by Elastic Cloud Phone.
@property (nonatomic, weak) id<ASPEngineIMEDelegate> imeDelegate;
// Callbacks for logs. We recommend using a singleton for the delegate.
+ (void)setASPEngineLogDelegate:(id<ASPEngineLogDelegate>)delegate;
+ (void)unsetASPEngineLogDelegate;

ASPEngineDelegate: Callbacks para conexões do Elastic Cloud Phone

API

Descrição

onConnectionSuccess:(int)connectId

Chamado quando a conexão com o ECP é estabelecida. Retorna o ID da conexão.

onConnectionFailureWithErrCode:(int)errCode errMsg:(NSString*)errMsg

Chamado quando a conexão com o ECP falha. Retorna um código de erro e uma mensagem de erro.

onEngineErrorWithErrCode:(int)errCode errMsg:(NSString*)errMsg

Chamado quando ocorre um erro interno no SDK. Retorna um código de erro e uma mensagem de erro.

onDisconnected:(int)reason

Chamado quando a conexão ECP é encerrada. Retorna o código do motivo da desconexão.

onFirstFrameRendered:(long)timeCostMS

Chamado quando o primeiro quadro do ECP é renderizado. Retorna o tempo decorrido em milissegundos.

onReconnect:(int)errorCode

Chamado quando o SDK tenta reconectar. Retorna o código de erro que acionou a reconexão.

onPolicyUpdate:(NSString *)policy

Chamado quando a política do ECP é atualizada. Retorna a configuração da política.

onUpdateNetworkQos:(AspNetworkQoS)qos

Relata o status de Qualidade de Serviço (QoS) da rede.

onSessionSuccess

Chamado quando a sessão do ECP é criada.

ASPEngineResolutionUpdateDelegate: Callbacks para alterações de resolução

API

Descrição

onResolutionUpdateWithOldWidth:(int)oldWidth oldHeight:(int)oldHeight width:(int)width height:(int)height

Chamado quando a resolução muda. Retorna as resoluções antiga e nova.

onMonitorsDpiConfig:(int)dpi maxSupportDpi:(int)maxSupportDpi

Fornece a configuração de DPI e o DPI máximo suportado. Não suportado pelo Elastic Cloud Phone.

ASPEngineCursorDelegate: Callbacks para o cursor do mouse

API

Descrição

onCursorBitmapUpdateWithHotX:(int)hotX hotY:(int)hotY

width:(int)width height:(int)height rgba:(char*)rgba

Chamado quando o bitmap do cursor é atualizado. Fornece as coordenadas do ponto ativo do cursor, dimensões e dados RGBA.

onCursorReset

Chamado quando o cursor do mouse é redefinido.

onCursorHide

Chamado quando o cursor do mouse é ocultado.

onCursorMoveWithX:(int)x y:(int)y

Chamado quando o cursor do mouse se move. Fornece as novas coordenadas.

ASPEngineStatisticsDelegate: Callbacks para rastreamento

API

Descrição

onStatisticsInfoUpdate:(ASPStatisticsInfo *)info

Relata estatísticas de desempenho do ECP em um objeto ASPStatisticsInfo.

ASPEngineLogDelegate: Callbacks para logs. Recomendamos usar um singleton para este delegate.

API

Descrição

onLogMessage:(NSString*)msg

tag:(NSString*)tag

level:(AspLogLevel)level

Chamado para cada mensagem de log do SDK. Fornece a mensagem de log, tag e nível para cada entrada.

3. API de service

API

Descrição

- (BOOL)enableStatistics:(BOOL) enabled enableGuestInfo:(BOOL)enableGuestInfo

Ativa ou desativa estatísticas e coleta de uso de cpu do guest.

- (BOOL)enableMouseMode:(BOOL)enabled

Ativa ou desativa o modo de mouse.

@property (nonatomic, assign) BOOL enableDump;

Ativa ou desativa o dump. Este recurso afeta o desempenho e destina-se apenas a desenvolvimento e depuração. Não utilize em produção.

- (BOOL)sendKeyboardEvent: (ASPKeyEvent) event;

Envia um evento de teclado.

// The leftButton parameter specifies whether to simulate a left or right button click. The click position is (0, 0).

- (BOOL)simulateMouseClick:(BOOL)leftButton;

- (BOOL)simulateMouseClick:(BOOL)leftButton x:(float)x y:(float)y;

Simula um clique do mouse.

- (void)hideCursor;

- (void)showCursor;

Oculta ou exibe o cursor.

- (void)setVideoProfileWithWidth:(int)width height:(int)height fps:(int)fps;

Define a resolução. O parâmetro fps não é suportado atualmente.

@property (nonatomic, assign) BOOL mute;

Silencia ou ativa o áudio.

@property (nonatomic, assign) ASPScaleType scaleType;

Tipo de escala para o fluxo de vídeo. Consulte a seção 5,1 ASPScaleType.

- (void)enableDesktopMode:(BOOL)enabled;

Ativa ou desativa o modo desktop. Quando ativado, mensagens de toque são convertidas em eventos de mouse. Para cloud phones, recomendado: NO.

- (void)enableDesktopGesture:(BOOL)enabled;

Ativa ou desativa gestos de zoom e panorâmica no lado do cliente. Para cloud phones, recomendado: NO.

@property (nonatomic, assign) BOOL enableTouchFeel;

Ativa ou desativa feedback tátil. O valor padrão é NO.

LyncChannel

Canal para envio de comandos ADB. Para um exemplo, consulte DemoLyncChannel na demonstração.

DataChannel

Canal de dados personalizado para comunicação entre o cliente e o guest. Para um exemplo, consulte DemoEDSAgentChannel na demonstração.

Exemplo de LyncChannel
// The default LyncChannel name is: static NSString *LYNC_CHANNEL_NAME = @"lync_adb_shell";
// Add the LyncChannel
self.lync = [[DemoLyncChannel alloc] initWithParameter:LYNC_CHANNEL_NAME];
[self.streamView addLyncChannel:self.lync];
// Remove the LyncChannel
[self.streamView removeLyncChannel:self.lync];
// LyncChannel implementation
@interface DemoLyncChannel : BaseLyncChannel
@property (nonatomic, strong) NSString *lslaID;

@end
@implementation DemoLyncChannel

- (void)onConnectStateChanged:(BOOL)connected {
    NSLog(@"[DemoLyncChannel] onConnectStateChanged %d", connected);
    if (connected) {
        // Test sending a command
        self.lslaID = [DemoToolBox getID];
        NSString *cmdData = [DemoToolBox getJsonDataWithId:self.lslaID cmd:@"ls -la"];
        NSLog(@"[DemoLyncChannel] cmdData : %@", cmdData);
        LyncErrorCode code = [self sendString:cmdData];
        NSLog(@"[DemoLyncChannel] cmdData code: %ld", code);
    }
}
- (void)onReceiveStringData:(NSString * _Nonnull)buf {
    NSLog(@"[DemoLyncChannel] onReceiveStringData %@", buf);
    NSDictionary *dic = [DemoToolBox convertStringToJSON:buf];
    NSString *ID = [dic objectForKey:@"id"];
    if (ID != NULL && ID.length && [self.lslaID isEqualToString:ID]) {
        NSLog(@"[DemoLyncChannel] onReceiveStringData: Received result for 'ls -la'.");
    }
}
- (void)onReceiveRawData:(NSData * _Nonnull)buf {
    NSString *string = [[NSString alloc] initWithData:buf encoding:NSUTF8StringEncoding];
    NSLog(@"[DemoLyncChannel] onReceiveRawData %@", string);
}
@end
Exemplo de DataChannel
// The default DataChannel name is: static NSString *DATA_CHANNEL_NAME = @"wy_vdagent_default_dc";
// Add the DataChannel
self.esdAgent = [[DemoEDSAgentChannel alloc] initWithParameter:DATA_CHANNEL_NAME];
[self.streamView addDataChannel:self.esdAgent];
// Remove the DataChannel
[self.streamView removeDataChannel:self.esdAgent];
// DataChannel implementation
@interface DemoEDSAgentChannel : BaseEDSAgentChannel
@end
@implementation DemoEDSAgentChannel

- (void)onConnectStateChanged:(ASPDCConnectState)state {
    NSLog(@"[DemoEDSAgentChannel] onConnectStateChanged %ld", state);
    if (state == OPEN) {
        // to send data
    }
}
- (void)onReceiveData:(NSData * _Nonnull)buf {
    NSString *string = [[NSString alloc] initWithData:buf encoding:NSUTF8StringEncoding];
    NSLog(@"[DemoEDSAgentChannel] onReceiveData %@", string);
}
@end

O canal de mensagens utiliza o DataChannel chamado wy_vdagent_default_dc.

O tamanho da mensagem é limitado a 500 KB.

O formato básico da mensagem é o seguinte:

DataChannel: Mensagens do cliente para o guest

Action: insertcontact, insertsms ou sendcontactvcf

  • insertcontact: Insere um contato.

O parâmetro obrigatório name especifica o nome do contato.

O parâmetro obrigatório phonenumber especifica o número de telefone.

  • insertsms: Insere um SMS.

O parâmetro obrigatório phonenumber especifica o número de telefone.

O parâmetro obrigatório textbody especifica o conteúdo do SMS.

O parâmetro opcional canInsertdb define se a mensagem deve ser inserida no banco de dados de SMS do cloud phone. O padrão é 0 (não inserir); defina como 1 para inserir.

Exemplo: let jsonarray = [{'action': 'insertcontact','importdata':[{ 'name': '**', 'phonenumber': '**' }, { 'name': '**', 'phonenumber': '**' }]},{'action': 'insertsms','importdata':[{'phonenumber':'**','textbody':'**,"canInsertdb":0/1}]}]

  • sendcontactvcf: Insere contatos a partir de um arquivo vcf.

O parâmetro obrigatório data contém o fluxo de dados do arquivo vcf. Arquivos grandes devem ser divididos em partes, com tamanho máximo de 1 MB por parte.

O parâmetro obrigatório allsize representa o tamanho total dos dados vcf.

Nota

O parâmetro timestamp é obrigatório. Utilize o mesmo timestamp para todas as partes de um único arquivo vcf a fim de garantir a remontagem correta.

Exemplo: {'action': 'sendcontactvcf', 'importdata': {'data': '', 'allsize': total_file_size, 'timestamp': current_timestamp}}.

public void processByteArrayInChunks(byte[] data) {
    int chunkSize = 512 * 1024; // 512 KB
    int length = data.length;
    long timestamp = System.currentTimeMillis();
    for (int i = 0; i < length; i += chunkSize) {
        int end = Math.min(i + chunkSize, length);
        byte[] chunk = Arrays.copyOfRange(data, i, end);
        String str = new String(chunk, StandardCharsets.UTF_8);
        /**
          {'action': 'sendcontactvcf','importdata':{"data":str, "allsize":length, "timestamp":timestamp}}
        */
    }
}
String recvData = "";
int recvSize = 0;
long recvTimestamp = 0;
public void onMessageReceive(byte[] message) {
  String action = getAction(message);
  String data = getData(message);
  int length = data.length;
  int allSize = getAllSize(message);
  long timestamp = getTimestamp(message);
  if (timestamp != recvTimestamp) {
    clearRecv();
  }
  if (action.equals("sendcontactvcf")) {
    recvSize += length;
    recvData = recvData + data;
    if (recvSize >= allSize) {
      // Write recvData to a vcf file and insert contacts.
      insertContact(vcfFilePath);
      sendack();
      clearRecv();
    }
  }
}

public void clearRecv() {
  recvData = "";
  recvSize = 0;
  recvTimestamp = 0;
}

DataChannel: Mensagens do guest para o cliente

Action: openeditsms, openphone ou rotation

  • openeditsms: Abre a página do editor de SMS.

O parâmetro opcional importdata.phonenumber especifica o número de telefone.

O parâmetro opcional textbody especifica o conteúdo do SMS.

Exemplo: {'action': 'openeditsms',importdata:{"phonenumber":"***", "textbody":"***"}}

  • openphone: Abre a página do discador telefônico.

O parâmetro opcional importdata.phonenumber especifica o número a ser chamado. Se fornecido, o discador abre com este número; caso contrário, a página principal do discador é exibida.

Exemplo: {'action': 'openphone','importdata':{"phonenumber":"***"}} ou {'action': 'openphone'}

Mensagem ACK do DataChannel

Action: ack

  • ack: Relata o status de processamento de uma mensagem recebida. Tanto o cliente quanto o guest podem enviar uma resposta ack se exigido pela lógica do aplicativo.

O parâmetro obrigatório source corresponde à ação da mensagem original.

O parâmetro obrigatório code indica o código de status, com os seguintes valores válidos: 0 (Desconhecido), 1 (Executando), 2 (Sucesso), 3 (Falha) e 4 (Não Suportado).

Exemplo: {'action': 'ack','importdata':{"source":"***", "code": *,"id":*}}

4. Parâmetros

4,1 ASPConnTicket

Parâmetros de configuração para estabelecer uma conexão.

Parâmetro

Descrição

connTicket

Ticket de autenticação de conexão.

caFilePath

O caminho absoluto para o arquivo CA, utilizado para criptografia TLS.

desktopId

ID da instância do aplicativo, como ai-0cc7s3n1iagyq****. Obtenha este ID chamando a API Query Instance Details.

useVpc

Indica se a conexão será feita via VPC.

enableTls

Ativa a criptografia TLS. Recomendado: YES.

enableStatistics

Ativa estatísticas. Recomendado: YES.

preferRtcTransport

Ativa o canal RTC. Recomendado: YES.

4,2 ASPStatisticsInfo

Dados de desempenho.

API

Tipo

Descrição

mReceiveFps

int

FPS recebido

mRenderFps

int

FPS de renderização

mDownstreamBandwithMBPerSecond

double

Largura de banda downstream

mUpstreamBandwithMBPerSecond

double

Largura de banda upstream

mP2pFullLinkageLatencyMS

long

Latência completa ponta a ponta. Descontinuado.

mNetworkLatencyMS

long

RTT de rede

mPingGatewayRtt

long

RTT de ping

mLostRate

double

Taxa de perda de pacotes

mServerRenderLatencyMS

long

Latência de renderização no servidor

mServerEncoderLatencyMS

long

Latência de codificação no servidor

mServerTotalLatencyMS

long

Latência total no servidor

accumulateBandwidth

long

Largura de banda total

mGuestCpuUsage

long

Uso de cpu do guest

mStreamType

String

Tipo de protocolo de fluxo

infoDic

NSDictionary

Um mapa de dados de desempenho.

5. Tipos de enumeração

5,1 ASPScaleType

Tipo de dimensionamento de conteúdo para uma imagem transmitida.

Parâmetro

Descrição

ASPScaleTypeFill

Estica a imagem transmitida para preencher todo o StreamView. Isso pode causar distorção se a proporção da imagem diferir da visualização.

ASPScaleTypeFit

Dimensiona a imagem transmitida para caber dentro do StreamView, preservando sua proporção. Exibe a imagem inteira sem distorção, mas pode deixar partes da visualização vazias.

Códigos de erro

Código de erro

Mensagem de erro (%s representa um cloud phone ou aplicativo cloud)

Módulo

Causa

Os códigos de erro de 2 a 26 referem-se principalmente a problemas de rede.

2

Falha ao conectar a %s.

ASP SDK

Valor MAGIC inválido.

3

Falha ao conectar a %s.

ASP SDK

Dados inválidos.

4

As versões do cliente e do servidor não correspondem.

ASP SDK

Incompatibilidade de versão.

5

É necessária uma conexão TLS.

ASP SDK

O servidor exige uma conexão TLS, mas o cliente não iniciou uma.

6

Conexão TLS inesperada.

ASP SDK

A conexão não requer TLS, mas foi utilizada.

7

Permissão negada para conectar a %s.

ASP SDK

Permissões insuficientes.

8

ID de cliente inválido durante a migração.

ASP SDK

ID de cliente inválido durante a migração.

9

Falha ao conectar a %s.

ASP SDK

O canal não existe.

20

Falha ao conectar ao servidor ASP.

ASP SDK

Erro de conexão do canal.

21

Ocorreu um erro de autenticação TLS.

ASP SDK

Erro de autenticação TLS.

22

Falha ao conectar a %s.

ASP SDK

Erro de link do canal.

23

Falha ao conectar a %s.

ASP SDK

Erro de autenticação de conexão.

24

Falha ao conectar a %s.

ASP SDK

Erro de I/O de conexão.

25

Falha ao conectar a %s.

ASP SDK

Falha na validação do ticket. Este erro também ocorre ao reutilizar um ticket de uma sessão encerrada.

26

xquic handshake failed.

ASP SDK

xquic handshake failed.

1206

The ticket is already in use.

ASP SDK

Um ticket pode ser reutilizado, mas apenas para uma conexão por vez. Este erro ocorre se você tentar estabelecer uma nova conexão enquanto o cloud phone já está em uso.

1207

Ticket invalidated by instance restart.

ASP SDK

A instância foi reiniciada, o que invalidou o ticket.

Códigos de erro do SDK para modo colaborativo

1000

Token is empty.

ASP SDK

Esses erros ocorrem apenas no modo colaborativo quando a validação secundária entre o cliente e o servidor falha.

1001

User is empty.

ASP SDK

1200

Token is invalid.

ASP SDK

1201

VM is invalid.

ASP SDK

1202

An admin internal error occurred.

ASP SDK

1203

User is invalid.

ASP SDK

1204

The token has expired.

ASP SDK

1500

A server internal error occurred.

ASP SDK

1501

A server network error occurred.

ASP SDK

Interrupções de conexão e outros erros

2000

Desconectado do servidor porque a busca de dados de %s expirou.

ASP SDK

Tempo limite de busca de dados.

2001

%s desconectado do servidor, possivelmente porque seu processo foi encerrado.

ASP SDK

Isso geralmente ocorre quando o processo no lado do cliente é encerrado. Por exemplo, um aplicativo Android é fechado pelo usuário pressionando o botão home.

2002

Outro usuário conectou-se ao %s atual a partir de um terminal diferente.

ASP SDK

A sessão foi assumida por outro usuário no modo preemptivo.

2003

%s está desligando ou reiniciando. Geralmente, trata-se de uma ação iniciada pelo administrador.

ASP SDK

O cloud phone foi desligado ou reiniciado, normalmente por um administrador.

2004

A conexão do usuário atual foi encerrada.

ASP SDK

O cliente iniciou a desconexão ou o servidor acionou uma ação de expulsão ou desconexão.

2005

Sessão desconectada: limite de tempo de uso atingido.

ASP SDK

A sessão foi encerrada porque atingiu o limite de duração de uso definido pelo administrador.

2006

Sua permissão para usar este cloud phone foi revogada pelo administrador. Você será desconectado.

ASP SDK

A autorização do usuário foi revogada por um administrador.

2010

Falha ao conectar a %s.

ASP SDK

Falha ao conectar ao Vdagent.

2011

Ocorreu um erro ao passar parâmetros de conexão.

ASP SDK

Um parâmetro inválido foi passado ao conectar ao servidor.

2027

O modo de pull do fluxo foi alternado.

ASP SDK

O modo de pull do fluxo foi alternado de modo preemptivo para colaborativo ou de colaborativo para preemptivo.

2100

Permissão de área de transferência negada para copiar de %s para o dispositivo local.

ASP SDK

O acesso à área de transferência da instância remota para o cliente local é negado por política.

2101

Permissão de área de transferência negada para copiar do dispositivo local para %s.

ASP SDK

O acesso à área de transferência do cliente local para a instância remota é negado por política.

2200

%s está tentando reconectar...

ASP SDK

A conexão foi perdida devido a um problema de rede e o ASP SDK está tentando reconectar.

2201

Seu dispositivo encontrou uma anomalia de rede, causando a desconexão de %s.

ASP SDK

A conexão foi perdida devido a um problema de rede. O ASP SDK não suporta reconexão devido a restrições de imagem; o lado do aplicativo deve iniciar a reconexão.

2202

Tempo limite de reconexão a %s.

ASP SDK

A tentativa de reconexão do ASP SDK expirou.

2210

Conexão perdida enquanto o dispositivo cliente estava em suspensão.

ASP SDK

A rede local foi desconectada enquanto o dispositivo cliente estava em suspensão, o que causou a perda da conexão com o cloud phone.

2212

Conexão perdida devido a uma anomalia na rede local.

ASP SDK

Uma anomalia na rede local foi detectada, causando a desconexão do cloud phone.

2220

Conexão perdida devido a uma anomalia na rede local.

ASP SDK

Uma anomalia na rede local foi detectada, causando a desconexão do cloud phone.

2240

A reconexão falhou porque o token no ticket é inválido.

ASP SDK

2300

A conexão falhou devido a um parâmetro inválido do lado do aplicativo.

app-side

2501

O cliente falhou ao conectar ao stream gateway. A rede está inacessível.

stream gateway

2502

O cliente falhou ao conectar ao stream gateway. A conexão TCP com o endereço IP do stream gateway expirou após três tentativas (15 segundos no total).

stream gateway

2503

O cliente falhou ao conectar ao stream gateway devido a um erro de rede desconhecido.

stream gateway

2504

O cliente falhou ao conectar ao stream gateway. A conexão foi abortada pelo software.

stream gateway

2505

O cliente falhou ao conectar ao stream gateway. A conexão foi recusada.

stream gateway

2506

O ticket é inválido. O gateway falhou ao analisar o token.

stream gateway

2507

O ticket é inválido porque expirou.

stream gateway

2508

O ticket é inválido devido a incompatibilidade de UUID.

stream gateway

2509

O stream gateway falhou ao sondar o servidor ASP.

stream gateway

2510

A sonda para o servidor foi rejeitada. Resolução: Certifique-se de que o servidor esteja escutando na porta 5912.

stream gateway

2511

A sonda para o servidor falhou devido a um erro diferente de tempo limite ou recusa.

stream gateway

2512

A validação do token do stream gateway falhou.

O ID da VPC no token de gerenciamento não corresponde ao ID da VPC do stream gateway.

stream gateway

2513

A conexão TCP foi redefinida durante o handshake "SayHello" entre o cliente e o stream gateway.

stream gateway

2520

A conexão do cliente falhou; uma verificação de autodiagnóstico indica uma anomalia de rede.

ASP SDK

2521

O cliente foi desconectado após três tentativas falhas de reconexão durante a fase de handshake TLS com o stream gateway.

ASP SDK

2522

Ocorreu um erro de conexão em um ambiente VPN.

ASP SDK

2523

O cliente está tentando conectar usando o conjunto de protocolos GM/T. Verifique a configuração do servidor ou selecione um método de conexão compatível.

ASP SDK

2701

Ocorreu um problema de rede no lado do cliente.

ASP SDK

2702

O handshake SSL entre o cliente e o stream gateway expirou.

ASP SDK

2703

O handshake "SayHello" entre o cliente e o stream gateway expirou.

ASP SDK

2704

A resposta do servidor ASP à solicitação de estabelecimento de conexão expirou.

Possíveis causas: O servidor ASP não responde, anomalia de rede, instância congelada ou alto uso de memória/cpu.

ASP SDK

2705

O cliente ASP expirou enquanto aguardava o primeiro quadro.

Possíveis causas: O servidor ASP não responde, nenhum quadro está sendo gerado devido a um problema de captura de tela ou driver de GPU, anomalia de rede ou alto uso de memória/cpu.

ASP SDK

2706

Alto uso local de cpu ou memória no cliente pode causar falhas de conexão.

ASP SDK

2707

O servidor ASP expirou ao recuperar o primeiro quadro de captura de tela do SO guest.

ASP SDK

2708

A conexão falhou porque um thread do SDK está travado.

ASP SDK

Erros de lógica do lado do cliente

5100

A conexão de %s com o servidor ASP expirou.

app-side

O lado do cliente não recebeu um evento "connected" dentro do período de tempo especificado.

5102

A busca de dados de %s expirou.

app-side

O lado do cliente recebeu um evento "connected", mas não recebeu um evento "display" dentro do período de tempo especificado.

5004

Parâmetros de inicialização inválidos.

app-side

Parâmetros de inicialização inválidos foram passados para o lado do cliente. Isso geralmente ocorre durante o desenvolvimento.

5200

Tempo limite de reconexão do cliente.

app-side

FAQ

Reiniciar o Elastic Cloud Phone

Para reiniciar uma instância, chame a API Restart Instance. Isso desconecta o ECP do cliente. Após a reinicialização da instância, reconecte-se a ela.

Comandos ADB comuns

Função

Comando

Botão Voltar

input keyevent KEYCODE_BACK

Botão home

input keyevent KEYCODE_HOME

Botão de aplicativos recentes

input keyevent KEYCODE_APP_SWITCH

Silenciar

input keyevent 164

Aumentar volume

input keyevent KEYCODE_VOLUME_UP

Diminuir volume

input keyevent KEYCODE_VOLUME_DOWN

Ocultar barra de navegação

setprop persist.wy.hasnavibar false; killall com.android.systemui

Mostrar barra de navegação

setprop persist.wy.hasnavibar true; killall com.android.systemui

Captura de tela

screencap -p /sdcard/Download/abc.png