All Products
Search
Document Center

Cloud Phone:iOS SDK

Last Updated:Jul 10, 2026

Integrate the iOS SDK for Elastic Cloud Phone into your app to stream and interact with cloud phone instances.

1. Quick start

1.1 Get the SDK and demo

Note

By downloading and using the SDK, you agree to the Alibaba Cloud Workspace SDK Privacy Policy.

Do not distribute them to any third party without Alibaba Cloud's consent.

Integration requirements

Minimum supported iOS version: 10.0

Due to iOS API availability, peripheral mouse and keyboard features require iOS 13.4 or later.

SDK integration

  1. Unzip the SDK and copy it into your project.

  2. Link the SDK library.

    Go to Target --> Build Phases --> Link Binary With Libraries --> + --> Add Other --> Add Files and select the required framework.

  3. Set the embed option.

    Go to Target --> General --> Frameworks, Libraries, and Embedded Content, find ASPEngineSDK.framework, and select Embed Without Signing.

SDK permissions

Add the required permissions for ASPEngineSDK to your project's Info.plist file.

1. Microphone permission

Privacy - Microphone Usage Description

2. Camera permission

Privacy - Camera Usage Description

SDK signing

The SDK is a dynamic library and must be signed for on-device debugging or for App Store submission.

  • Get a signing ID

To find your signing ID, run:

security find-identity -v -p codesigning

If you don't have a local certificate, log in to your Apple Developer account and download the provisioning profile. Right-click the downloaded file, choose Get Info, and find the SHA-1 field of the target certificate. This value is the signing ID.

  • Signing & Capabilities

In your project target, correctly configure the certificate in the Signing & Capabilities tab.

  • Add a signing shell script. This script is required for physical devices but not for simulators.

Go to Target --> Build Phases --> + --> New Run Script Phase and paste the shell script content. See the sample signing shell script below.

Note: This Run Script phase must be placed after the Embed Frameworks phase.

  • Sample signing shell script

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}"

Project configuration

Disable Bitcode.

Go to Target --> Build Settings --> Build Options --> Enable Bitcode and set the option to No.

1.2 Integration workflow

image

1.3 Best practices

See Best practices for quick integration with cloud phones. The following diagram outlines the integration architecture.

image

Multiple login methods can provide the connection ticket required by the SDK. The following diagram illustrates these workflows.

image

For code examples, see the lifecycle API sample code.

2. Lifecycle API

2.1 Initialize instance

+ (instancetype)buildStreamView;

2.2 Establish connection

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

ASPConnTicket parameters:

Parameter

Description

connTicket

Connection ticket for authentication.

caFilePath

Absolute path to the CA file for TLS encryption.

desktopId

Application instance ID, such as ai-0cc7s3n1iagyq****. Get this ID by calling the Query Instance Details API.

useVpc

Whether to connect over a VPC.

enableTls

Enables encrypted transmission. Recommended: YES.

enableStatistics

Enables tracking. Recommended: YES.

preferRtcTransport

Enables the RTC channel. Recommended: YES.

2.3 Disconnect

- (int)stop;

2.4 Pause

Pauses the stream from the server and rendering on the client.

- (void)pause;

2.5 Resume

Resumes the stream from the server and rendering on the client.

- (void)resume;

2.6 Dispose instance

- (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 for Elastic Cloud Phone connections

API

Description

onConnectionSuccess:(int)connectId

Called when the connection to the ECP is established. Returns the connection ID.

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

Called when the connection to the ECP fails. Returns an error code and an error message.

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

Called when an internal SDK error occurs. Returns an error code and an error message.

onDisconnected:(int)reason

Called when the ECP connection is disconnected. Returns the disconnect reason code.

onFirstFrameRendered:(long)timeCostMS

Called when the first ECP frame is rendered. Returns the elapsed time in milliseconds.

onReconnect:(int)errorCode

Called when the SDK attempts to reconnect. Returns the error code that triggered the reconnection.

onPolicyUpdate:(NSString *)policy

Called when the ECP policy is updated. Returns the policy configuration.

onUpdateNetworkQos:(AspNetworkQoS)qos

Reports the network Quality of Service (QoS) status.

onSessionSuccess

Called when the ECP session is created.

ASPEngineResolutionUpdateDelegate: Callbacks for resolution changes

API

Description

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

Called when the resolution changes. Returns the old and new resolutions.

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

Provides the DPI configuration and the maximum supported DPI. Not supported by Elastic Cloud Phone.

ASPEngineCursorDelegate: Callbacks for the mouse cursor

API

Description

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

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

Called when the cursor bitmap is updated. Provides the cursor's hot spot coordinates, dimensions, and RGBA data.

onCursorReset

Called when the mouse cursor is reset.

onCursorHide

Called when the mouse cursor is hidden.

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

Called when the mouse cursor moves. Provides the new coordinates.

ASPEngineStatisticsDelegate: Callbacks for tracking

API

Description

onStatisticsInfoUpdate:(ASPStatisticsInfo *)info

Reports ECP performance statistics in an ASPStatisticsInfo object.

ASPEngineLogDelegate: Callbacks for logs. We recommend using a singleton for this delegate.

API

Description

onLogMessage:(NSString*)msg

tag:(NSString*)tag

level:(AspLogLevel)level

Called for each SDK log message. Provides the log message, tag, and level for each entry.

3. Service API

API

Description

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

Enables or disables statistics and guest CPU usage collection.

- (BOOL)enableMouseMode:(BOOL)enabled

Enables or disables mouse mode.

@property (nonatomic, assign) BOOL enableDump;

Enables or disables dumping. This feature affects performance and is for development and debugging only. Do not use in production.

- (BOOL)sendKeyboardEvent: (ASPKeyEvent) event;

Sends a keyboard event.

// 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;

Simulates a mouse click.

- (void)hideCursor;

- (void)showCursor;

Hides or shows the cursor.

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

Sets the resolution. The fps parameter is not currently supported.

@property (nonatomic, assign) BOOL mute;

Mutes or unmutes the audio.

@property (nonatomic, assign) ASPScaleType scaleType;

Scale type for the video stream. See section 5.1 ASPScaleType.

- (void)enableDesktopMode:(BOOL)enabled;

Enables or disables desktop mode. When enabled, touch messages are converted to mouse events. For cloud phones, recommended: NO.

- (void)enableDesktopGesture:(BOOL)enabled;

Enables or disables client-side zoom and pan gestures. For cloud phones, recommended: NO.

@property (nonatomic, assign) BOOL enableTouchFeel;

Enables or disables haptic feedback. The default value is NO.

LyncChannel

Channel for sending ADB commands. For an example, see DemoLyncChannel in the demo.

DataChannel

Custom data channel for communication between the client and the guest. For an example, see DemoEDSAgentChannel in the demo.

LyncChannel example
// 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
DataChannel example
// 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

The message channel uses the DataChannel named wy_vdagent_default_dc.

The message size is limited to 500 KB.

The basic message format is as follows:

DataChannel: Messages from client to guest

Action: insertcontact, insertsms, or sendcontactvcf

  • insertcontact: Inserts a contact.

The required name parameter specifies the contact name.

The required phonenumber parameter specifies the phone number.

  • insertsms: Inserts an SMS.

The required phonenumber parameter specifies the phone number.

The required textbody parameter specifies the SMS content.

The optional canInsertdb parameter specifies whether to insert the message into the cloud phone's SMS database. The default is 0 (do not insert); set to 1 to insert.

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

  • sendcontactvcf: Inserts contacts from a vcf file.

The required data parameter contains the vcf file data stream. Large files must be chunked, with a maximum chunk size of 1 MB.

The required allsize parameter is the total size of the vcf data.

Note

The timestamp parameter is required. Use the same timestamp for all chunks of a single vcf file to ensure correct reassembly.

Example: {'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: Messages from guest to client

Action: openeditsms, openphone, or rotation

  • openeditsms: Opens the SMS editor page.

The optional importdata.phonenumber parameter specifies the phone number.

The optional textbody parameter specifies the SMS content.

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

  • openphone: Opens the phone dialer page.

The optional importdata.phonenumber parameter specifies the number to call. If provided, the dialer opens with this number; otherwise, the main dialer page opens.

Example: {'action': 'openphone','importdata':{"phonenumber":"***"}} or {'action': 'openphone'}

DataChannel ACK message

Action: ack

  • ack: Reports the processing status of a received message. Either the client or guest can send an ack response if required by the application's logic.

The required source parameter is the action from the original message.

The required code parameter is the status code, with the following valid values: 0 (Unknown), 1 (Executing), 2 (Success), 3 (Failure), and 4 (Not Supported).

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

4. Parameters

4.1 ASPConnTicket

Configuration parameters to establish a connection.

Parameter

Description

connTicket

Connection authentication ticket.

caFilePath

The absolute path to the CA file, used for TLS encryption.

desktopId

Application instance ID, such as ai-0cc7s3n1iagyq****. Get this ID by calling the Query Instance Details API.

useVpc

Whether to connect over a VPC.

enableTls

Enables TLS encryption. Recommended: YES.

enableStatistics

Enables statistics. Recommended: YES.

preferRtcTransport

Enables the RTC channel. Recommended: YES.

4.2 ASPStatisticsInfo

Performance data.

API

Type

Description

mReceiveFps

int

Received FPS

mRenderFps

int

Render FPS

mDownstreamBandwithMBPerSecond

double

Downstream bandwidth

mUpstreamBandwithMBPerSecond

double

Upstream bandwidth

mP2pFullLinkageLatencyMS

long

End-to-end full-link latency. Deprecated.

mNetworkLatencyMS

long

Network RTT

mPingGatewayRtt

long

Ping RTT

mLostRate

double

Packet loss rate

mServerRenderLatencyMS

long

Server-side rendering latency

mServerEncoderLatencyMS

long

Server-side encoding latency

mServerTotalLatencyMS

long

Server-side total latency

accumulateBandwidth

long

Total bandwidth

mGuestCpuUsage

long

Guest CPU usage

mStreamType

String

Stream protocol type

infoDic

NSDictionary

A map of performance data.

5. Enumeration types

5.1 ASPScaleType

Content scaling type for a streamed image.

Parameter

Description

ASPScaleTypeFill

Stretches the streamed image to fill the entire StreamView. This may cause distortion if the image's aspect ratio differs from the view's.

ASPScaleTypeFit

Scales the streamed image to fit within the StreamView, preserving its aspect ratio. This displays the entire image without distortion, but may leave parts of the view empty.

Error codes

Error code

Error message (%s represents a cloud phone or cloud app)

Module

Cause

Error codes 2–26 are primarily related to network issues.

2

Failed to connect to %s.

ASP SDK

Invalid MAGIC value.

3

Failed to connect to %s.

ASP SDK

Invalid data.

4

The client and server versions do not match.

ASP SDK

Version mismatch.

5

A TLS connection is required.

ASP SDK

The server requires a TLS connection, but the client did not initiate one.

6

Unexpected TLS connection.

ASP SDK

The connection does not require TLS, but it was used.

7

Permission denied to connect to %s.

ASP SDK

Insufficient permissions.

8

Invalid client ID during migration.

ASP SDK

Invalid client ID during migration.

9

Failed to connect to %s.

ASP SDK

The channel does not exist.

20

Failed to connect to the ASP server.

ASP SDK

Channel connection error.

21

A TLS authentication error occurred.

ASP SDK

TLS authentication error.

22

Failed to connect to %s.

ASP SDK

Channel link error.

23

Failed to connect to %s.

ASP SDK

Connection authentication error.

24

Failed to connect to %s.

ASP SDK

Connection I/O error.

25

Failed to connect to %s.

ASP SDK

Ticket validation failed. This error also occurs when reusing a ticket from a terminated session.

26

xquic handshake failed.

ASP SDK

xquic handshake failed.

1206

The ticket is already in use.

ASP SDK

A ticket can be reused, but only for one connection at a time. This error occurs if you attempt to establish a new connection while the cloud phone is already in use.

1207

Ticket invalidated by instance restart.

ASP SDK

The instance was restarted, which invalidated the ticket.

SDK error codes for collaborative mode

1000

Token is empty.

ASP SDK

These errors occur only in collaborative mode when the secondary validation between the client and the server fails.

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

Connection interruptions and other errors

2000

Disconnected from the server because fetching data from %s timed out.

ASP SDK

Data fetch timeout.

2001

%s disconnected from the server, possibly because its process was terminated.

ASP SDK

This typically occurs when the process on the client-side is terminated. For example, an Android app is closed by the user pressing the Home button.

2002

Another user has connected to the current %s from a different terminal.

ASP SDK

The session was taken over by another user in preemptive mode.

2003

%s is shutting down or restarting. This is usually an administrator-initiated action.

ASP SDK

The cloud phone was shut down or restarted, typically by an administrator.

2004

The current user connection was terminated.

ASP SDK

The client initiated the disconnection, or the server triggered a kick or disconnect action.

2005

Session disconnected: usage time limit reached.

ASP SDK

The session was terminated because it reached the usage duration limit set by the administrator.

2006

Your permission to use this cloud phone has been revoked by the administrator. You will be logged out and disconnected.

ASP SDK

The user's authorization was revoked by an administrator.

2010

Failed to connect to %s.

ASP SDK

Failed to connect to Vdagent.

2011

An error occurred while passing connection parameters.

ASP SDK

An invalid parameter was passed when connecting to the server.

2027

The stream pull mode was switched.

ASP SDK

The stream pull mode was switched from preemptive mode to collaborative mode, or from collaborative mode to preemptive mode.

2100

Clipboard permission denied to copy from %s to the local device.

ASP SDK

Clipboard access from the remote instance to the local client is denied by policy.

2101

Clipboard permission denied to copy from the local device to %s.

ASP SDK

Clipboard access from the local client to the remote instance is denied by policy.

2200

%s is attempting to reconnect...

ASP SDK

The connection was lost due to a network issue, and the ASP SDK is attempting to reconnect.

2201

Your device encountered a network anomaly, causing %s to disconnect.

ASP SDK

The connection was lost due to a network issue. The ASP SDK does not support reconnection due to image constraints; the app-side must initiate the reconnection.

2202

Reconnection to %s timed out.

ASP SDK

The ASP SDK reconnection attempt timed out.

2210

Connection lost while the client device was asleep.

ASP SDK

The local network was disconnected while the client device was asleep, which caused the cloud phone connection to be lost.

2212

Connection lost due to a local network anomaly.

ASP SDK

A local network anomaly was detected, which caused the cloud phone to disconnect.

2220

Connection lost due to a local network anomaly.

ASP SDK

A local network anomaly was detected, which caused the cloud phone to disconnect.

2240

Reconnection failed because the token in the ticket is invalid.

ASP SDK

2300

Connection failed due to an invalid parameter from the app-side.

app-side

2501

The client failed to connect to the stream gateway. The network is unreachable.

stream gateway

2502

The client failed to connect to the stream gateway. The TCP connection to the stream gateway IP address timed out after three attempts (15 seconds total).

stream gateway

2503

The client failed to connect to the stream gateway due to an unknown network error.

stream gateway

2504

The client failed to connect to the stream gateway. The connection was aborted by software.

stream gateway

2505

The client failed to connect to the stream gateway. The connection was refused.

stream gateway

2506

The ticket is invalid. The gateway failed to parse the token.

stream gateway

2507

The ticket is invalid because it has expired.

stream gateway

2508

The ticket is invalid due to a UUID mismatch.

stream gateway

2509

The stream gateway failed to probe the ASP server.

stream gateway

2510

The probe to the server was rejected. Resolution: Ensure that the server is listening on port 5912.

stream gateway

2511

The probe to the server failed due to an error other than a timeout or refusal.

stream gateway

2512

The stream gateway token validation failed.

The VPC ID in the management token does not match the VPC ID of the stream gateway.

stream gateway

2513

The TCP connection was reset during the "SayHello" handshake between the client and the stream gateway.

stream gateway

2520

The client connection failed; a self-diagnostic check indicates a network anomaly.

ASP SDK

2521

The client was disconnected after three failed reconnection attempts during the TLS handshake phase with the stream gateway.

ASP SDK

2522

A connection error occurred in a VPN environment.

ASP SDK

2523

The client is attempting to connect by using the GM/T protocol suite. Verify the server configuration or select a compatible connection method.

ASP SDK

2701

A client-side network issue occurred.

ASP SDK

2702

The SSL handshake between the client and the stream gateway timed out.

ASP SDK

2703

The "SayHello" handshake between the client and the stream gateway timed out.

ASP SDK

2704

The ASP server response to the connection establishment request timed out.

Possible causes: The ASP server is unresponsive, network anomaly, frozen instance, or high memory/CPU usage.

ASP SDK

2705

The ASP client timed out while waiting for the first frame.

Possible causes: The ASP server is unresponsive, no frames are being generated due to a screen capture or GPU driver issue, a network anomaly, or high memory/CPU usage.

ASP SDK

2706

High local CPU or memory usage on the client may cause connection failures.

ASP SDK

2707

The ASP server timed out while retrieving the first screen capture frame from the guest OS.

ASP SDK

2708

Connection failed because an SDK thread is stuck.

ASP SDK

Client-side logic errors

5100

The connection from %s to the ASP server timed out.

app-side

The client-side did not receive a "connected" event within the specified time period.

5102

Fetching data from %s timed out.

app-side

The client-side received a "connected" event but did not receive a "display" event within the specified time period.

5004

Invalid startup parameters.

app-side

Invalid startup parameters were passed to the client-side. This typically occurs during development.

5200

Client reconnection timed out.

app-side

FAQ

Restart Elastic Cloud Phone

To restart an instance, call the Restart Instance API. This disconnects the ECP from the client. After the instance restarts, reconnect to it.

Common ADB commands

Function

Command

Back button

input keyevent KEYCODE_BACK

Home button

input keyevent KEYCODE_HOME

App switch button

input keyevent KEYCODE_APP_SWITCH

Mute

input keyevent 164

Volume up

input keyevent KEYCODE_VOLUME_UP

Volume down

input keyevent KEYCODE_VOLUME_DOWN

Hide navigation bar

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

Show navigation bar

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

Screenshot

screencap -p /sdcard/Download/abc.png