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
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
Descompacte o SDK e copie-o para o seu projeto.
-
Vincule a biblioteca do SDK.
Acesse Target --> Build Phases --> Link Binary With Libraries --> + --> Add Other --> Add Files e selecione o framework necessário.
-
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
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.
Diversos métodos de login podem fornecer o ticket de conexão exigido pelo SDK. O diagrama seguinte ilustra esses fluxos de trabalho.
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 |
|
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 |
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 - (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 |
|
@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 |
|
- (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 |
|
DataChannel |
Canal de dados personalizado para comunicação entre o cliente e o guest. Para um exemplo, consulte |
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.
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 respostaackse 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 |
|
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 ( | 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 |