Integrasikan dan gunakan iOS SDK untuk Elastic Cloud Phone.
1. Mulai cepat
1.1 Dapatkan SDK dan demo
Dengan mengunduh dan menggunakan SDK, Anda menyetujui Kebijakan Privasi SDK WUYING Workspace.
Seluruh dokumen, SDK, dan program klien pada platform ini hanya diperuntukkan bagi penggunaan pribadi atau perusahaan. Jangan mendistribusikannya kepada pihak ketiga tanpa persetujuan Alibaba Cloud.
Persyaratan integrasi
Versi iOS minimum yang didukung: 10.0.
Karena ketergantungan pada API iOS, fitur mouse dan keyboard eksternal memerlukan iOS 13.4 atau versi lebih baru.
Integrasi SDK
Ekstrak SDK dan salin ke dalam proyek Anda.
Hubungkan library SDK.
Buka Target → Build Phases → Link Binary With Libraries → + → Add Other → Add Files, lalu pilih framework yang diperlukan.
Atur opsi embed.
Buka Target → General → Frameworks, Libraries, and Embedded Content, temukan ASPEngineSDK.framework, lalu pilih Embed Without Signing.
Izin SDK
Tambahkan izin yang diperlukan untuk ASPEngineSDK ke file Info.plist proyek Anda.
1. Izin mikrofon
Privacy - Microphone Usage Description2. Izin kamera
Privacy - Camera Usage DescriptionPenandatanganan SDK
SDK merupakan library dinamis dan harus ditandatangani untuk debugging di perangkat fisik atau distribusi ke App Store.
Dapatkan ID penandatanganan
Untuk menemukan ID penandatanganan Anda, jalankan:
security find-identity -v -p codesigningJika Anda tidak memiliki sertifikat lokal, masuk ke akun Apple Developer Anda dan unduh provisioning profile. Klik kanan file yang diunduh, pilih Get Info, lalu temukan bidang SHA-1 dari sertifikat target. Nilai tersebut adalah ID penandatanganan Anda.
Signing & Capabilities
Pada target proyek Anda, konfigurasikan sertifikat dengan benar di tab Signing & Capabilities.
Tambahkan skrip shell penandatanganan. Skrip ini diperlukan untuk perangkat fisik, tetapi tidak untuk simulator.
Buka Target → Build Phases → + → New Run Script Phase, lalu tempel konten skrip shell tersebut. Contoh skrip shell penandatanganan tersedia di bawah ini.
Catatan: Fase Run Script ini harus ditempatkan setelah fase Embed Frameworks.
Contoh skrip shell penandatanganan
set -e
SHELL_PATH="${PROJECT_DIR}/ASPDemo/Lib/ASPEngineSDK/ASPEngineSDK.framework/link_and_sign.sh"
KEY_ID="Signing ID sertifikat Anda"
echo "===> Menandatangani menggunakan $KEY_ID"
/bin/bash -c "${SHELL_PATH}"\ "${TARGET_BUILD_DIR}"\ "${FRAMEWORKS_FOLDER_PATH}"\ "${KEY_ID}"Konfigurasi proyek
Nonaktifkan Bitcode.
Buka Target → Build Settings → Build Options → Enable Bitcode, lalu atur opsi tersebut menjadi No.
1.2 Alur kerja integrasi
1.3 Praktik terbaik
Lihat Praktik terbaik untuk integrasi cepat dengan cloud phone. Diagram berikut menggambarkan arsitektur integrasi.
Anda dapat menggunakan beberapa metode login untuk mendapatkan tiket koneksi yang diperlukan oleh SDK. Diagram berikut mengilustrasikan alur kerja tersebut.
Untuk contoh kode, lihat kode sampel untuk API siklus hidup.
2. API Siklus Hidup
2.1 Inisialisasi instans
+ (instancetype)buildStreamView;2.2 Membangun koneksi
- (void)startWithTicket:(ASPConnTicket*) ticketParam;Parameter ASPConnTicket:
Parameter | Deskripsi |
connTicket | Tiket koneksi untuk otentikasi. |
caFilePath | Jalur mutlak ke file CA untuk enkripsi TLS. |
desktopId | ID instans aplikasi, seperti |
useVpc | Apakah akan terhubung melalui VPC. |
enableTls | Mengaktifkan transmisi terenkripsi. Direkomendasikan: YES. |
enableStatistics | Mengaktifkan pelacakan. Direkomendasikan: YES. |
preferRtcTransport | Mengaktifkan saluran RTC. Direkomendasikan: YES. |
2.3 Putuskan koneksi
- (int)stop;2.4 Jeda
Menjeda aliran dari server dan rendering di klien.
- (void)pause;2.5 Ringkasan
Melanjutkan aliran dari server dan rendering di klien.
- (void)resume;2.6 Hapus instans
- (void)dispose;2.7 Callback
// Callback untuk koneksi Elastic Cloud Phone.
@property (nonatomic, weak) id<ASPEngineDelegate> engineDelegate;
// Callback untuk perubahan resolusi.
@property (nonatomic, weak) id<ASPEngineResolutionUpdateDelegate> resolutionUpdateDelegate;
// Callback untuk kursor mouse.
@property (nonatomic, weak) id<ASPEngineCursorDelegate> cursorDelegate;
// Callback untuk perubahan orientasi Elastic Cloud Phone.
@property (nonatomic, weak) id<ASPEngineOrientationUpdateDelegate> orientationUpdateDelegate;
// Callback untuk pelacakan.
@property (nonatomic, weak) id<ASPEngineStatisticsDelegate> statisticsDelegate;
// Callback untuk Input Method Editor (IME). Tidak didukung oleh Elastic Cloud Phone.
@property (nonatomic, weak) id<ASPEngineIMEDelegate> imeDelegate;
// Callback untuk log. Kami merekomendasikan penggunaan singleton untuk delegate ini.
+ (void)setASPEngineLogDelegate:(id<ASPEngineLogDelegate>)delegate;
+ (void)unsetASPEngineLogDelegate;ASPEngineDelegate: Callback untuk koneksi Elastic Cloud Phone
API | Deskripsi |
onConnectionSuccess:(int)connectId | Dipanggil saat koneksi ke ECP berhasil dibangun. Mengembalikan ID koneksi. |
onConnectionFailureWithErrCode:(int)errCode errMsg:(NSString*)errMsg | Dipanggil saat koneksi ke ECP gagal. Mengembalikan kode kesalahan dan pesan kesalahan. |
onEngineErrorWithErrCode:(int)errCode errMsg:(NSString*)errMsg | Dipanggil saat terjadi kesalahan internal SDK. Mengembalikan kode kesalahan dan pesan kesalahan. |
onDisconnected:(int)reason | Dipanggil saat koneksi ke ECP diputus. Mengembalikan kode yang menunjukkan alasan pemutusan. |
onFirstFrameRendered:(long)timeCostMS | Dipanggil saat frame pertama dari ECP dirender. Mengembalikan waktu yang berlalu dalam milidetik. |
onReconnect:(int)errorCode | Dipanggil saat SDK mencoba menyambung ulang ke ECP. Mengembalikan kode kesalahan yang memicu penyambungan ulang. |
onPolicyUpdate:(NSString *)policy | Dipanggil saat kebijakan ECP diperbarui. Mengembalikan konfigurasi kebijakan. |
onUpdateNetworkQos:(AspNetworkQoS)qos | Dipanggil untuk melaporkan status Quality of Service (QoS) jaringan. |
onSessionSuccess | Dipanggil saat sesi ECP dibuat. |
ASPEngineResolutionUpdateDelegate: Callback untuk perubahan resolusi
API | Deskripsi |
onResolutionUpdateWithOldWidth:(int)oldWidth oldHeight:(int)oldHeight width:(int)width height:(int)height | Dipanggil saat resolusi berubah. Mengembalikan resolusi lama dan baru. |
onMonitorsDpiConfig:(int)dpi maxSupportDpi:(int)maxSupportDpi | Menyediakan konfigurasi DPI dan DPI maksimum yang didukung. Tidak didukung oleh Elastic Cloud Phone. |
ASPEngineCursorDelegate: Callback untuk kursor mouse
API | Deskripsi |
onCursorBitmapUpdateWithHotX:(int)hotX hotY:(int)hotY width:(int)width height:(int)height rgba:(char*)rgba | Dipanggil saat bitmap kursor diperbarui. Menyediakan koordinat titik panas kursor, dimensi, dan data RGBA. |
onCursorReset | Dipanggil saat kursor mouse direset. |
onCursorHide | Dipanggil saat kursor mouse disembunyikan. |
onCursorMoveWithX:(int)x y:(int)y | Dipanggil saat kursor mouse bergerak. Menyediakan koordinat baru. |
ASPEngineStatisticsDelegate: Callback untuk pelacakan
API | Deskripsi |
onStatisticsInfoUpdate:(ASPStatisticsInfo *)info | Dipanggil untuk melaporkan statistik performa ECP. Statistik disediakan dalam objek |
ASPEngineLogDelegate: Callback untuk log. Kami merekomendasikan penggunaan singleton untuk delegate ini.
API | Deskripsi |
onLogMessage:(NSString*)msg tag:(NSString*)tag level:(AspLogLevel)level | Dipanggil untuk setiap pesan log SDK. Menyediakan pesan log, tag, dan level untuk setiap entri. |
3. API Layanan
API | Deskripsi |
- (BOOL)enableStatistics:(BOOL) enabled enableGuestInfo:(BOOL)enableGuestInfo | Mengaktifkan atau menonaktifkan pengumpulan statistik dan penggunaan CPU guest. |
- (BOOL)enableMouseMode:(BOOL)enabled | Mengaktifkan atau menonaktifkan mode mouse. |
@property (nonatomic, assign) BOOL enableDump; | Mengaktifkan atau menonaktifkan dump. Fitur ini memengaruhi performa dan hanya untuk tujuan pengembangan dan debugging. Jangan gunakan di lingkungan produksi. |
- (BOOL)sendKeyboardEvent: (ASPKeyEvent) event; | Mengirim event keyboard. |
// Parameter - (BOOL)simulateMouseClick:(BOOL)leftButton; - (BOOL)simulateMouseClick:(BOOL)leftButton x:(float)x y:(float)y; | Mensimulasikan klik mouse. |
- (void)hideCursor; - (void)showCursor; | Menyembunyikan atau menampilkan kursor. |
- (void)setVideoProfileWithWidth:(int)width height:(int)height fps:(int)fps; | Mengatur resolusi. Parameter |
@property (nonatomic, assign) BOOL mute; | Mematikan atau mengaktifkan audio. |
@property (nonatomic, assign) ASPScaleType scaleType; | Jenis penskalaan untuk aliran video. Lihat bagian 5.1 |
- (void)enableDesktopMode:(BOOL)enabled; | Mengaktifkan atau menonaktifkan mode desktop. Saat diaktifkan, pesan sentuh dikonversi menjadi event mouse. Untuk cloud phone, direkomendasikan: NO. |
- (void)enableDesktopGesture:(BOOL)enabled; | Mengaktifkan atau menonaktifkan gesture zoom dan pan di sisi client. Untuk cloud phone, direkomendasikan: NO. |
@property (nonatomic, assign) BOOL enableTouchFeel; | Mengaktifkan atau menonaktifkan umpan balik haptik. Nilai default adalah NO. |
LyncChannel | Saluran untuk mengirim perintah ADB. Untuk contoh, lihat |
DataChannel | Saluran data kustom untuk komunikasi antara client dan guest. Untuk contoh, lihat |
Contoh LyncChannel
// Nama default LyncChannel adalah: static NSString *LYNC_CHANNEL_NAME = @"lync_adb_shell";
// Tambahkan LyncChannel
self.lync = [[DemoLyncChannel alloc] initWithParameter:LYNC_CHANNEL_NAME];
[self.streamView addLyncChannel:self.lync];
// Hapus LyncChannel
[self.streamView removeLyncChannel:self.lync];
// Implementasi LyncChannel
@interface DemoLyncChannel : BaseLyncChannel
@property (nonatomic, strong) NSString *lslaID;
@end
@implementation DemoLyncChannel
- (void)onConnectStateChanged:(BOOL)connected {
NSLog(@"[DemoLyncChannel] onConnectStateChanged %d", connected);
if (connected) {
// Uji mengirim perintah
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);
}
@endContoh DataChannel
// Nama default DataChannel adalah: static NSString *DATA_CHANNEL_NAME = @"wy_vdagent_default_dc";
// Tambahkan DataChannel
self.esdAgent = [[DemoEDSAgentChannel alloc] initWithParameter:DATA_CHANNEL_NAME];
[self.streamView addDataChannel:self.esdAgent];
// Hapus DataChannel
[self.streamView removeDataChannel:self.esdAgent];
// Implementasi DataChannel
@interface DemoEDSAgentChannel : BaseEDSAgentChannel
@end
@implementation DemoEDSAgentChannel
- (void)onConnectStateChanged:(ASPDCConnectState)state {
NSLog(@"[DemoEDSAgentChannel] onConnectStateChanged %ld", state);
if (state == OPEN) {
// untuk mengirim data
}
}
- (void)onReceiveData:(NSData * _Nonnull)buf {
NSString *string = [[NSString alloc] initWithData:buf encoding:NSUTF8StringEncoding];
NSLog(@"[DemoEDSAgentChannel] onReceiveData %@", string);
}
@endSaluran pesan menggunakan DataChannel bernama wy_vdagent_default_dc.
Ukuran pesan dibatasi hingga 500 KB.
Format pesan dasar adalah sebagai berikut:
DataChannel: Pesan dari klien ke guest
Action: insertcontact, insertsms, atau sendcontactvcf
insertcontact: Menyisipkan kontak.
Parameter wajib name menentukan nama kontak.
Parameter wajib phonenumber menentukan nomor telepon.
insertsms: Menyisipkan SMS.
Parameter wajib phonenumber menentukan nomor telepon.
Parameter wajib textbody menentukan isi SMS.
Parameter opsional canInsertdb menentukan apakah pesan akan dimasukkan ke database SMS cloud phone. Nilai default-nya adalah 0 (tidak dimasukkan); atur ke 1 untuk memasukkan.
Contoh: let jsonarray = [{'action': 'insertcontact','importdata':[{ 'name': '**', 'phonenumber': '**' }, { 'name': '**', 'phonenumber': '**' }]},{'action': 'insertsms','importdata':[{'phonenumber':'**','textbody':'**',"canInsertdb":0/1}]}]
sendcontactvcf: Menyisipkan kontak dari file vcf.
Parameter wajib data berisi aliran data file vcf. File besar harus dipecah menjadi chunk dengan ukuran maksimum 1 MB per chunk.
Parameter wajib allsize menunjukkan ukuran total data vcf.
Parameter wajib timestamp harus digunakan. Gunakan timestamp yang sama untuk semua chunk dari satu file vcf agar dapat dirakit kembali dengan benar.
Contoh: {'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) {
// Tulis recvData ke file vcf dan sisipkan kontak.
insertContact(vcfFilePath);
sendack();
clearRecv();
}
}
}
public void clearRecv() {
recvData = "";
recvSize = 0;
recvTimestamp = 0;
}DataChannel: Pesan dari guest ke klien
Action: openeditsms, openphone, atau rotation
openeditsms: Membuka halaman editor SMS.
Parameter opsional importdata.phonenumber menentukan nomor telepon.
Parameter opsional textbody menentukan isi SMS.
Contoh: {'action': 'openeditsms', 'importdata':{"phonenumber":"***", "textbody":"***"}}
openphone: Membuka halaman dialer telepon.
Parameter opsional importdata.phonenumber menentukan nomor yang akan dipanggil. Jika disediakan, dialer akan membuka dengan nomor tersebut; jika tidak, halaman utama dialer akan dibuka.
Contoh: {'action': 'openphone','importdata':{"phonenumber":"***"}} atau {'action': 'openphone'}
Pesan ACK DataChannel
Action: ack
ack: Melaporkan status pemrosesan pesan yang diterima. Baik klien maupun guest dapat mengirim responsackjika diperlukan oleh logika aplikasi.
Parameter wajib source adalah action dari pesan asli.
Parameter wajib code adalah kode status, dengan nilai valid berikut: 0 (Unknown), 1 (Executing), 2 (Success), 3 (Failure), dan 4 (Not Supported).
Contoh: {'action': 'ack','importdata':{"source":"***", "code": *,"id":*}}
4. Parameter
4.1 ASPConnTicket
Parameter konfigurasi untuk membangun koneksi.
Parameter | Deskripsi |
connTicket | Tiket otentikasi koneksi. |
caFilePath | Jalur mutlak ke file CA, digunakan untuk enkripsi TLS. |
desktopId | ID instans aplikasi, seperti |
useVpc | Apakah akan terhubung melalui VPC. |
enableTls | Mengaktifkan enkripsi TLS. Direkomendasikan: YES. |
enableStatistics | Mengaktifkan statistik. Direkomendasikan: YES. |
preferRtcTransport | Mengaktifkan saluran RTC. Direkomendasikan: YES. |
4.2 ASPStatisticsInfo
Data performa.
API | Tipe | Deskripsi |
mReceiveFps | int | FPS yang diterima |
mRenderFps | int | Render FPS |
mDownstreamBandwithMBPerSecond | double | Bandwidth downstream |
mUpstreamBandwithMBPerSecond | double | Bandwidth upstream |
mP2pFullLinkageLatencyMS | long | Latensi end-to-end full-link. Sudah tidak digunakan. |
mNetworkLatencyMS | long | RTT jaringan |
mPingGatewayRtt | long | RTT ping |
mLostRate | double | Laju kehilangan paket |
mServerRenderLatencyMS | long | Latensi rendering sisi server |
mServerEncoderLatencyMS | long | Latensi encoding sisi server |
mServerTotalLatencyMS | long | Total latensi sisi server |
accumulateBandwidth | long | Total bandwidth |
mGuestCpuUsage | long | Penggunaan CPU guest |
mStreamType | String | Tipe protokol aliran |
infoDic | NSDictionary | Peta data performa. |
5. Tipe enumerasi
5.1 ASPScaleType
Menentukan tipe penskalaan konten untuk gambar yang dialirkan.
Parameter | Deskripsi |
ASPScaleTypeFill | Meregangkan gambar yang dialirkan agar mengisi seluruh StreamView. Hal ini dapat menyebabkan distorsi jika rasio aspek gambar berbeda dari view. |
ASPScaleTypeFit | Menyesuaikan skala gambar yang dialirkan agar muat dalam StreamView, mempertahankan rasio aspeknya. Ini menampilkan seluruh gambar tanpa distorsi, tetapi mungkin meninggalkan bagian view yang kosong. |
Kode kesalahan
Kode kesalahan | Pesan kesalahan ( | Modul | Penyebab |
Kode kesalahan 2–26: Masalah terkait jaringan | |||
2 | Gagal terhubung ke %s. | ASP SDK | MAGIC tidak valid. |
3 | Gagal terhubung ke %s. | ASP SDK | Data salah. |
4 | Versi client tidak cocok dengan versi server. | ASP SDK | Ketidakcocokan versi. |
5 | Koneksi memerlukan TLS. | ASP SDK | TLS diperlukan. |
6 | Koneksi tidak memerlukan TLS. | ASP SDK | TLS digunakan padahal tidak diperlukan. |
7 | Anda tidak memiliki izin untuk terhubung ke %s. | ASP SDK | Izin ditolak. |
8 | ASP SDK | ID client tidak valid selama migrasi. | |
9 | Gagal terhubung ke %s. | ASP SDK | Saluran yang ditentukan tidak ada. |
20 | Gagal terhubung ke server ASP. | ASP SDK | Kesalahan koneksi saluran. |
21 | Otentikasi TLS gagal. | ASP SDK | Otentikasi TLS gagal. |
22 | Gagal terhubung ke %s. | ASP SDK | Kesalahan tautan saluran. |
23 | Gagal terhubung ke %s. | ASP SDK | Kesalahan otentikasi koneksi. |
24 | Gagal terhubung ke %s. | ASP SDK | Kesalahan I/O koneksi. |
25 | Gagal terhubung ke %s. | ASP SDK | Validasi tiket gagal. Kesalahan ini juga terjadi jika Anda menggunakan tiket yang sama untuk koneksi baru setelah sesi sebelumnya terputus. |
26 | ASP SDK | Kegagalan jabat tangan XQUIC. | |
1206 | Satu tiket hanya mendukung satu koneksi aktif dalam satu waktu. Kesalahan ini terjadi jika Anda mencoba menggunakannya untuk koneksi baru saat sesi sudah aktif. | ASP SDK | |
1207 | Me-restart instans membuat tiket tidak valid. | ASP SDK | |
Kode kesalahan kolaborasi aliran SDK | |||
1000 | token empty | ASP SDK | Kesalahan kolaborasi aliran ini terjadi saat validasi sekunder antara client dan server gagal. |
1001 | user empty | ASP SDK | |
1200 | token invalid | ASP SDK | |
1201 | vm invalid | ASP SDK | |
1202 | ADMIN internal error | ASP SDK | |
1203 | user invalid | ASP SDK | |
1204 | token expired | ASP SDK | |
1500 | server internal error | ASP SDK | |
1501 | server network error | ASP SDK | |
Pemutusan dan kesalahan koneksi | |||
2000 | Koneksi ke server timeout saat mengambil data dari %s. | ASP SDK | Pemutusan normal. |
2001 | %s terputus dari server. Hal ini dapat terjadi jika proses %s dipaksa dihentikan. | ASP SDK | Ini biasanya terjadi saat proses aplikasi di sisi client dihentikan, misalnya saat pengguna menutup aplikasi. |
2002 | Pengguna lain telah terhubung ke %s dari client berbeda. Silakan coba lagi nanti. | ASP SDK | Sesi diambil alih oleh pengguna lain dalam mode preemptive. |
2003 | %s sedang dimatikan atau di-restart. Operasi ini biasanya dilakukan oleh administrator. Silakan coba lagi nanti. | ASP SDK | Cloud phone dimatikan atau di-restart, biasanya oleh administrator. |
2004 | Koneksi pengguna saat ini dihentikan. | ASP SDK | Client memulai pemutusan, atau server menghentikan sesi. |
2005 | %s terputus karena sesi mencapai batas penggunaan yang ditetapkan oleh administrator. | ASP SDK | Sesi dihentikan karena mencapai batas penggunaan yang ditetapkan oleh administrator. |
2006 | Administrator mencabut izin Anda untuk menggunakan cloud phone ini. Sesi Anda akan terputus. | ASP SDK | Administrator mencabut izin pengguna. |
2010 | Gagal terhubung ke %s. | ASP SDK | Kegagalan koneksi Vdagent. |
2011 | Parameter koneksi tidak valid. | ASP SDK | Client mencoba terhubung dengan parameter yang tidak valid. |
2027 | Mode tarik aliran telah diubah. | ASP SDK | Mode tarik aliran diubah dari mode preemptive ke mode kolaboratif, atau sebaliknya. |
2100 | Izin clipboard ditolak: menyalin dari %s ke client lokal tidak diizinkan. | ASP SDK | Izin clipboard ditolak: menyalin dari VM ke client lokal tidak diizinkan. |
2101 | Izin clipboard ditolak: menyalin dari client lokal ke %s tidak diizinkan. | ASP SDK | Izin clipboard ditolak: menyalin dari client lokal ke VM tidak diizinkan. |
2200 | %s sedang mencoba menyambung ulang... | ASP SDK | Masalah jaringan menyebabkan kehilangan koneksi. ASP SDK sedang mencoba menyambung ulang. |
2201 | %s terputus karena masalah jaringan pada perangkat Anda. | ASP SDK | Masalah jaringan menyebabkan kehilangan koneksi. ASP SDK tidak mendukung penyambungan ulang otomatis untuk image saat ini, sehingga sisi aplikasi harus memulainya. |
2202 | Penyambungan ulang ke %s timeout. Periksa jaringan perangkat Anda dan coba lagi. | ASP SDK | Timeout penyambungan ulang ASP SDK. |
2210 | Cloud phone terputus karena perangkat client memasuki mode tidur, menyebabkan kehilangan jaringan. | ASP SDK | |
2212 | Cloud phone terputus karena masalah jaringan lokal. | ASP SDK | |
2220 | Cloud phone terputus karena masalah jaringan lokal. | ASP SDK | |
2240 | Penyambungan ulang gagal karena token dalam tiket tidak valid. | ||
2300 | Koneksi gagal karena parameter yang tidak valid dikirim dari sisi aplikasi. | ||
2501 | Client gagal terhubung ke gateway aliran. Jaringan tidak dapat dijangkau. | ||
2502 | Client gagal terhubung ke gateway aliran. Koneksi TCP ke IP gateway aliran timeout setelah tiga percobaan (total 15 detik). | ||
2503 | Client gagal terhubung ke gateway aliran karena kesalahan jaringan yang tidak diketahui. | ||
2504 | Koneksi client ke gateway aliran terganggu oleh perangkat lunak. | ||
2505 | Koneksi client ke gateway aliran ditolak. | ||
2506 | Tiket tidak valid. Gateway aliran gagal mengurai token. | ||
2507 | Tiket tidak valid. Tiket telah kedaluwarsa. | ||
2508 | Tiket tidak valid. UUID tidak cocok. | ||
2509 | Gateway aliran gagal melakukan probe ke server ASP. | ||
2510 | Server menolak probe. | ||
2511 | Probe server gagal karena alasan selain timeout atau penolakan. | ||
2512 | Validasi token gateway aliran gagal. vpcId dalam token management tidak cocok dengan vpcId gateway aliran. | ||
2513 | Koneksi TCP tiba-tiba di-reset selama pertukaran "hello" antara client dan gateway aliran. | ||
2520 | Koneksi gagal. Diagnosis mandiri client menunjukkan adanya masalah jaringan. | ||
2521 | Koneksi terputus secara abnormal tiga kali selama fase Proses jabat tangan TLS antara client dan gateway aliran. | ||
2522 | Terjadi kesalahan koneksi di lingkungan VPN. | ||
2523 | Client mencoba terhubung menggunakan protokol kriptografi nasional. Verifikasi pengaturan server atau pilih metode koneksi yang kompatibel. | ||
2701 | Masalah jaringan di sisi client. Sebagai uji coba, coba terhubung menggunakan hotspot seluler 5G untuk melihat apakah masalah masih berlanjut. | ||
2702 | Proses jabat tangan SSL antara client dan gateway aliran timeout. | ||
2703 | Pertukaran "hello" antara client dan gateway aliran timeout. | ||
2704 | Server ASP timeout saat merespons permintaan pembentukan koneksi. Kemungkinan penyebab termasuk server ASP beku, masalah jaringan, image tidak responsif, atau penggunaan CPU/memori tinggi. | ||
2705 | Client ASP timeout saat menunggu frame pertama. Kemungkinan penyebab termasuk server ASP beku, kegagalan pembuatan frame (karena masalah tangkapan layar atau driver GPU), masalah jaringan, atau penggunaan CPU/memori tinggi. | ||
2706 | Koneksi gagal karena penggunaan CPU atau memori tinggi pada perangkat client. | ||
2707 | Server ASP timeout saat mengambil frame tangkapan layar pertama dari OS guest. | ||
2708 | Koneksi gagal karena thread SDK macet. | ||
Kesalahan logika sisi client | |||
5100 | Koneksi ke server ASP timeout. Silakan coba lagi nanti. | Sisi aplikasi | Sisi client tidak menerima event "connected" dalam jangka waktu yang diharapkan. |
5102 | Timeout saat menunggu data dari %s. Silakan coba lagi nanti. | Sisi aplikasi | Sisi client menerima event "connected" tetapi tidak menerima event "display" dalam jangka waktu yang diharapkan. |
5004 | Client mengalami kesalahan. Silakan restart client. | Sisi aplikasi | Sisi client menerima parameter startup yang tidak valid. Ini biasanya terjadi selama pengembangan. |
5200 | Penyambungan ulang client timeout. Silakan coba lagi nanti. | Sisi aplikasi | |
FAQ
Restart Elastic Cloud Phone
Untuk me-restart instans, panggil API Restart Instance. Hal ini akan memutus ECP dari klien. Setelah instans di-restart, sambungkan kembali ke instans tersebut.
Perintah ADB umum
Fungsi | Perintah |
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 |