All Products
Search
Document Center

Cloud Phone:Edisi Windows SDK C++

Last Updated:Jun 23, 2026

Topik ini menjelaskan cara menggunakan edisi Windows SDK C++ untuk Cloud Phone.

1. Memulai

1.1 Mendapatkan SDK dan demo

Unduh SDK dan demo

Kebutuhan lingkungan integrasi

Rilis Windows x64

Mengimpor SDK

Contoh Visual Studio 2019:

Buka Project Properties > Configuration Properties > VC++ Directories. Tambahkan direktori include asp-client-sdk ke Include Directories.

Buka Project Properties > Configuration Properties > VC++ Directories. Tambahkan direktori lib asp-client-sdk ke Library Directories.

Buka Project Properties > Configuration Properties > Linker > General. Tambahkan direktori lib asp-client-sdk ke Additional Library Directories.

Buka Project Properties > Configuration Properties > Linker > Input. Tambahkan asp-client-sdk.lib, asp-engine.lib, dan glog.lib ke Additional Dependencies.

Contoh Qt Creator:

Tambahkan baris berikut ke file .pro proyek Anda:

INCLUDEPATH+=$$PWD/asp-client-sdk/include \
LIBS+=$$PWD/asp-client-sdk/lib/asp-client-sdk.lib \
      $$PWD/asp-client-sdk/lib/asp-engine.lib \
      $$PWD/asp-client-sdk/lib/glog.lib \

Jalankan demo dengan cepat

Unduh Windows_Demo_Release dan ekstrak untuk mendapatkan dua direktori: server dan client. Direktori ini masing-masing berisi demo sisi server dan sisi client.

Jalankan server

Ubah file konfigurasi:

{
    "httpPort": "8328",
    "accessKeyId": "AK",
    "accessKeySecret": "SK",
    "androidRegionId": "cn-hangzhou"
}

Ganti AK dan SK dengan ID AccessKey dan AccessKey Secret Anda yang sebenarnya. Atur androidRegionId ke ID wilayah instans Anda.

Jalankan server/run_server.bat. Pesan berikut akan muncul:

2024-11-01T13:48:27.002Z Server is running on http://127.0.0.1:8328/listAic

Server telah berhasil dijalankan.

Jalankan client

{
  "CLOUD_SCREENSIZE_HEIGHT": 100,
  "CLOUD_SCREENSIZE_WIDTH": 100,
  "DEBUG_MODE": 2,
  "DISPLAY_COL": 11,
  "DISPLAY_GROUP": 20,
  "GROUPIDS": [
       "ag-1jknz4zyznleim503"
  ],
  "GROUP_SCREENSIZE_HEIGHT": 100,
  "GROUP_SCREENSIZE_WIDTH": 100,
  "LOCAL_SCREENSIZE_HEIGHT": 720,
  "LOCAL_SCREENSIZE_WIDTH": 480,
  "DISPLAY_SCALE": 1,
  "GROUP_SCALE": 8,
  "MAX_PHONE_NUM": 0,
  "PROXY_CONN_TYPE": 0,
  "QUIC_OPTION": false,
  "PHONE_URL": "http://127.0.0.1",
  "PORT": 8328,
  "AUDIO_ENABLE": false,
  "USE_DUMP": false,
  "USE_OPENGL": true
}

Ganti GROUPIDS dengan ID grup instans Cloud Phone yang ingin Anda kendalikan. ID tersebut harus diawali dengan ag-. Anda dapat menentukan beberapa ID grup. Simpan file setelah memperbaruinya dengan ID grup instans Cloud Phone berawalan ag- Anda.

Deskripsi parameter konfigurasi:

CLOUD_SCREENSIZE_HEIGHT: Tinggi awal layar cloud
CLOUD_SCREENSIZE_WIDTH: Lebar awal layar cloud
DEBUG_MODE: Tingkat log (0 = tanpa log, 1 = debug, 2 = info)
DISPLAY_COL: Jumlah maksimum kolom yang ditampilkan (10)
GROUPIDS: Grup instans (mendukung daftar)
GROUP_SCREENSIZE_HEIGHT: Tinggi awal jendela gambar mini lokal
GROUP_SCREENSIZE_WIDTH: Lebar awal jendela gambar mini lokal
LOCAL_SCREENSIZE_HEIGHT: Tinggi awal jendela kontrol utama lokal
LOCAL_SCREENSIZE_WIDTH: Lebar awal jendela kontrol utama lokal
DISPLAY_SCALE: Rasio penskalaan kontrol utama
GROUP_SCALE: Rasio penskalaan gambar mini
MAX_PHONE_NUM: Jumlah maksimum koneksi
PROXY_CONN_TYPE: Jenis koneksi (nilai tetap)
QUIC_OPTION: Apakah menggunakan QUIC (nilai tetap)
PHONE_URL: Alamat server
PORT: Port server
AUDIO_ENABLE: Apakah audio diaktifkan
EndUserId: Username streaming kolaboratif
IS_COO: Apakah streaming kolaboratif diaktifkan
SALE_MODE: Apakah CPS diaktifkan
SHOW_INSTENCE_NAME: Apakah nama atau ID instans ditampilkan
USE_OPENGL: Apakah rendering OpenGL diaktifkan

Jalankan client/WuyingDemo.exe.

1.2 Alur integrasi

1.3 Praktik terbaik

Untuk panduan integrasi terperinci, lihat Praktik terbaik untuk mengintegrasikan Cloud Phone dengan cepat. Arsitektur integrasi Cloud Phone secara keseluruhan ditunjukkan pada diagram berikut:

Beberapa metode login tersedia untuk mendapatkan tiket yang diperlukan untuk integrasi SDK. Bagan alir berikut menunjukkan prosesnya:

Untuk detail implementasi spesifik, rujuk kode contoh pada bagian antarmuka siklus hidup.

2. Antarmuka siklus hidup

2.1 Membuat koneksi gambar mini

Prototipe fungsi: static AspClient* create(AspTicket& ticket, wuying::asp::shared_ptr<IAspClientCallback> callback);

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

ticket

AspTicket

AspTicket berisi informasi apakah dalam mode gambar mini, detail instans, dan kredensial koneksi. Untuk informasi lebih lanjut, lihat 4.1 AspTicket.

callback

IAspClientCallback

Callback koneksi. Untuk informasi lebih lanjut, lihat 2.5.1 Proxy callback koneksi IAspClientCallback.

Deskripsi fungsi: Antarmuka ini membuat koneksi gambar mini ke Cloud Phone.

Contoh kode:

AspTicket ticket;
// Set ticket
ticket.ticket = "";
// Set AppInstanceId
ticket.id = "";//AppInstanceId;
// Set user
ticket.user = "";//Nama Cloud Phone
// uuid harus sesuai dengan uuid backend
ticket.uuid = "wyClient";
// Tetap untuk Windows
ticket.systemType = "Windows";
// Tetap ke 0
ticket.partner = 0;
// Apakah mode gambar mini diaktifkan. Tetap ke true.
ticket.isThumbnailEnable = true;

// Tambahkan callback koneksi. Lihat detail di bawah.
shared_ptr<AspClientCbImpl> iClient(new AspClientCbImpl(cert.Id));
AspClient *client=AspClient::create(ticket, iClient);

// Callback clipboard. Lihat detail di bawah.
shared_ptr<AspClipboardlmpl> clipboardCallback(new AspClipboardlmpl());
client->setClipboardCallback(clipboardCallback);

// Callback perintah shell. Lihat detail di bawah.
shared_ptr<AspShellCmdlmpl> shellCmdCallBack(new AspShellCmdlmpl());
client->setShellCmdCallback(shellCmdCallBack);

// Atur ukuran tampilan gambar mini: lebar (int), tinggi (int), fps (int)
client->setThumbnailDisplay(with, height, 1);

// Atur jenis koneksi. Tetap ke socket dan false.
client->setProxyConnType(ASP_CONN_SOCKET);
client->setQuicOption(false);

// Atur callback tampilan
shared_ptr<IAspDisplayCallback> iDisplay(nullptr);
auto display = client->addDisplay(iDisplay);

// Hubungkan ke ponsel
client->open();

2.2 Membuat koneksi kontrol utama

Prototipe fungsi: static AspClient* create(AspTicket& ticket, wuying::asp::shared_ptr<IAspClientCallback> callback);

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

ticket

AspTicket

AspTicket berisi informasi instans dan kredensial koneksi. Untuk informasi lebih lanjut, lihat 4.1 AspTicket.

callback

IAspClientCallback

Callback koneksi. Untuk informasi lebih lanjut, lihat 2.5.1 Proxy callback koneksi IAspClientCallback.

Deskripsi fungsi: Antarmuka ini membuat koneksi kontrol utama ke Cloud Phone.

Contoh kode:

AspTicket ticket;
// Set the ticket.
ticket.ticket = "";
// Set the AppInstanceId.
ticket.id = "";//AppInstanceId;
// Set the user.
ticket.user = "";// Nama cloud phone.
// UUID harus sama dengan UUID di backend.
ticket.uuid = "wyClient";
// Tetap ke nilai: Windows.
ticket.systemType = "Windows";
// Tetap ke nilai: 0.
ticket.partner = 0;
// Aktifkan fitur gambar mini. Tetap ke nilai: true.
ticket.isThumbnailEnable = true;

// Tambahkan callback koneksi. Untuk informasi lebih lanjut, lihat bagian selanjutnya.
shared_ptr<AspClientCbImpl> iClient(new AspClientCbImpl(cert.Id));
AspClient *client=AspClient::create(ticket, iClient);

// Callback clipboard. Untuk informasi lebih lanjut, lihat bagian selanjutnya.
shared_ptr<AspClipboardlmpl> clipboardCallback(new AspClipboardlmpl());
client->setClipboardCallback(clipboardCallback);

// Tambahkan callback perintah Shell. Untuk informasi lebih lanjut, lihat bagian selanjutnya.
shared_ptr<AspShellCmdlmpl> shellCmdCallBack(new AspShellCmdlmpl());
client->setShellCmdCallback(shellCmdCallBack);

// Atur ukuran jendela gambar mini. Parameter: lebar (int), tinggi (int), dan fps (int).
client->setThumbnailDisplay(with, height, 1);

// Atur jenis koneksi. Jenis tetap ke socket dan opsi QUIC diatur ke false.
client->setProxyConnType(ASP_CONN_SOCKET);
client->setQuicOption(false);

// Atur callback jendela.
shared_ptr<IAspDisplayCallback> iDisplay(nullptr);
auto display = client->addDisplay(iDisplay);

// Hubungkan ke cloud phone.
client->open();

2.3 reopen

Prototipe fungsi: void reopen(std::string& ticket)

Deskripsi fungsi: Membuka ulang koneksi atau menyambungkan kembali setelah terputus. Hanya berlaku setelah memanggil close(false).

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

ticket

std::string

Ticket adalah kredensial koneksi. Biasanya berlaku selama 10 menit.

Contoh kode:

client->reopen(ticket);

2.4 close

Prototipe fungsi: void close(bool destroyClient = false) 

Deskripsi fungsi: Menutup koneksi.

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

destroyClient

bool

Apakah membersihkan sumber daya. Nilai default adalah false.

Contoh kode:

client->close(false)

2.5 Deskripsi callback

2.5.1 Proxy callback koneksi IAspClientCallback

Deskripsi antarmuka proxy:

Antarmuka

Deskripsi

void onThumbnailUpdate(void* buffer, uint32_t width, uint32_t height, AspImageFormat format)

Dipanggil saat gambar mini berhasil diperbarui untuk koneksi Cloud Phone. Untuk detail format, lihat 5.2 AspImageFormat.

void onConnectEvent(ConnectEvent& event)

Dipanggil saat terjadi event koneksi. Untuk detail event, lihat 4.2 ConnectEvent.

Contoh kode:

class AspClientCbImpl : public IAspClientCallback
{
public:
    AspClientCbImpl() {}
    // Callback pembaruan gambar mini
    void onThumbnailUpdate(void* buffer, uint32_t width, uint32_t height, AspImageFormat format) override {

    }
    // Callback event koneksi
    void onConnectEvent(ConnectEvent& event) override {
       switch(event.type) {
          case ConnectEventType::EVENT_CONNECT_SUCCESS:
              
              break;
          case ConnectEventType::EVENT_CONNECT_FAILED:
              
              break;
          case ConnectEventType::EVENT_DISCONNECT_SUCCESS:
              
              break;
          case ConnectEventType::EVENT_RECONNECT_START:
              
              break;
          case ConnectEventType::EVENT_RECONNECT_FAILED:
              
              break;
          default:
              
              break;
        }
    }
};

2.5.2 Proxy callback aliran kontrol utama IAspDisplayCallback

Deskripsi antarmuka proxy:

Antarmuka

Deskripsi

void onImageFrameReady(AspImageFrame& frame)

Dipanggil saat aliran kontrol utama siap setelah koneksi Cloud Phone berhasil. Untuk detail frame, lihat 4.3 AspImageFrame.

Contoh kode:

class AspDisplayCbImpl : public IAspDisplayCallback
{
public:
    void onImageFrameReady(AspImageFrame& frame) override {
        // Pointer ke array byte gambar kontrol utama (panjang = lebar × tinggi × 4)
        uint8_t* ptr = static_cast<uint8_t*>(frame.buffer);
        // Lebar gambar
        int width = frame.width;
        // Tinggi gambar
        int height = frame.height;
        // Harus dilepas secara manual
        frame.releaseBuffer();
    }
};

2.5.3 Proxy callback audio AspAudio

Deskripsi antarmuka proxy:

Antarmuka

Deskripsi

void onAudioFrameRender(AspAudioFrame &frame)

Tidak perlu diimplementasikan. Untuk detail frame, lihat 4.4 AspAudioFrame. Rendering audio ditangani secara internal oleh SDK.

void onAudioVolumeUpdate(uint32_t volume)

Tidak perlu diimplementasikan. Rendering audio ditangani secara internal oleh SDK.

void onAudioMuteUpdate(bool isMute)

Tidak perlu diimplementasikan. Rendering audio ditangani secara internal oleh SDK.

void onAudioPlaybackUpdate(AspAudioPlayback &playback)

Tidak perlu diimplementasikan. Untuk detail playback, lihat 4.5 AspAudioPlayback. Rendering audio ditangani secara internal oleh SDK.

void onAudioPlaybackStart()

Tidak perlu diimplementasikan. Rendering audio ditangani secara internal oleh SDK.

void onAudioPlaybackStop()

Tidak perlu diimplementasikan. Rendering audio ditangani secara internal oleh SDK.

Contoh kode:

class AspAudioImpl : public AspAudio
{
public:
    void onAudioFrameRender(AspAudioFrame &frame) override{
    
    }
    void onAudioVolumeUpdate(uint32_t volume) override{
    
    }
    void onAudioMuteUpdate(bool isMute) override{
    
    }

    void onAudioPlaybackUpdate(AspAudioPlayback &playback) override{
    
    }

    void onAudioPlaybackStart() override{
    
    }
    void onAudioPlaybackStop() override{
    
    }
};

3. Antarmuka bisnis

3.1 Antarmuka logging

3.1.1 Inisialisasi

Deskripsi fungsi: Antarmuka ini mencetak log internal SDK untuk troubleshooting.

Contoh kode:

// Inisialisasi logging. AspLogSinkImpl adalah callback log.
auto logSinkImpl = std::make_shared<AspLogSinkImpl>();
AspLogSink::setLogSink(logSinkImpl.get());

3.1.2 Proxy callback AspLogSink

Deskripsi antarmuka proxy:

Antarmuka

Deskripsi

void debug(const std::string& tag, const std::string& msg)

Callback log debug SDK

void info(const std::string& tag, const std::string& msg) 

Callback log info SDK

void warning(const std::string& tag, const std::string& msg)

Callback log warning SDK

void fatal(const std::string& tag, const std::string& msg)

Callback log fatal SDK

void error(const std::string& tag, const std::string& msg)

Callback log error SDK

Contoh kode:

#include "AspLogSink.h"

using namespace wuying::asp;

class AspLogSinkImpl : public AspLogSink
{
public:
    AspLogSinkImpl() {

    }

    void debug(const std::string& tag, const std::string& msg) override {
        // Cetak log debug
    }
    void info(const std::string& tag, const std::string& msg) override {
        // Cetak log info
    }
    void warning(const std::string& tag, const std::string& msg) override {
        // Cetak log warning
    }
    void fatal(const std::string& tag, const std::string& msg) override {
        // Cetak log fatal
    }
    void error(const std::string& tag, const std::string& msg) override {
        // Cetak log error
    }
};

3.2 Antarmuka bisnis gambar mini

3.2.1 suspendThumbnailDisplay

Prototipe fungsi: void suspendThumbnailDisplay() 

Deskripsi fungsi: Menangguhkan streaming gambar mini.

Contoh kode:

client->suspendThumbnailDisplay();

3.2.2 resumeThumbnailDisplay

Prototipe fungsi: void resumeThumbnailDisplay() 

Deskripsi fungsi: Melanjutkan streaming gambar mini dan dapat memaksa mendorong satu frame.

Contoh kode:

client->resumeThumbnailDisplay();

3.3 Fitur tambahan kontrol utama

3.3.1 setOutputImageFormat

Prototipe fungsi: void setOutputImageFormat(AspImageFormat format)

Deskripsi fungsi: Mengatur format frame callback kontrol utama.

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

format

AspImageFormat

Format frame callback kontrol utama. Untuk detail, lihat 5.2 AspImageFormat.

Contoh kode:

client->setOutputImageFormat(AspImageFormat::BGRA);

3.3.2 requestGraphicsKeyFrame

Prototipe fungsi: void requestGraphicsKeyFrame(AspDisplay* display) = 0;

Deskripsi fungsi: Mendorong satu keyframe untuk aliran kontrol utama. Parameter adalah AspDisplay.

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

display

AspDisplay*

Pointer kelas tampilan

Contoh kode:

client->requestGraphicsKeyFrame(display);

3.3.3 setGraphicsQuality

Prototipe fungsi: void setGraphicsQuality(AspImageQuality quality) = 0;

Deskripsi fungsi: Mengatur kualitas gambar. Kualitas bergantung pada resolusi. Secara umum, atur parameter ini ke AUTO. Untuk parameter terperinci, lihat definisi struct.

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

quality

AspImageQuality

Kualitas gambar. Untuk detail, lihat 5.4 AspImageQuality.

client->setGraphicsQuality(ASP_IMAGE_QUALITY_AUTO)

3.3.4 setGraphicsFps

Prototipe fungsi: void setGraphicsFps(int fps) = 0;

Deskripsi fungsi: Mengatur frame per detik (FPS).

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

fps

int

Laju frame

Contoh kode:

client->setGraphicsFps(30)

3.3.5 setGraphicsBitrate

Prototipe fungsi: void setGraphicsBitrate(int32_t bps) = 0;

Deskripsi fungsi: Mengatur bitrate, yang memengaruhi ukuran gambar.

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

bps

int32_t

Bitrate

Bitrate berikut hanya sebagai referensi:

Kualitas gambar

Bitrate

Kualitas rendah

1×1024

Sedang

5×1024

Kualitas tinggi

10×1024

Tanpa loss

50×1024

Contoh kode:

client->setGraphicsBitrate(1*1024)

3.4 Mouse

3.4.1 sendMouseClick

Prototipe fungsi: void sendMouseClick(AspAction action, uint32_t button, uint32_t buttonState) = 0;

Deskripsi fungsi: Mengirim event klik mouse.

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

action

AspAction

Untuk detail, lihat 5.5 AspAction.

button

uint32_t

Untuk detail, lihat 5.6 AspMouseButtonMask.

buttonState

uint32_t

Untuk detail, lihat 5.7 AspMouseButton.

Contoh kode:

// Tekan tombol kiri mouse
display->sendMouseClick(AspAction::ACTION_DOWN, ASP_MOUSE_BUTTON_MASK_L, ASP_MOUSE_BUTTON_LEFT);
// Lepas tombol kiri mouse
display->sendMouseClick(AspAction::ACTION_UP, ASP_MOUSE_BUTTON_MASK_L, ASP_MOUSE_BUTTON_LEFT);

3.4.2 sendMouseMove

Prototipe fungsi: virtual void sendMouseMove(uint32_t x, uint32_t y, uint32_t buttonState) = 0;

Deskripsi fungsi: Mengirim event gerakan mouse.

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

x

uint32_t

Koordinat horizontal Cloud Phone

y

uint32_t

Koordinat vertikal Cloud Phone

buttonState

uint32_t

Untuk detail, lihat 5.6 AspMouseButtonMask.

Contoh kode:

// x dan y adalah koordinat Cloud Phone
sendMouseMove(x, y, ASP_MOUSE_BUTTON_MASK_L)

3.5 Keyboard

3.5.1 sendKeyEvent

Prototipe fungsi: virtual void sendKeyEvent(AspAction action, int scancode) = 0;

Fitur ini menjelaskan event keyboard.

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

action

AspAction

Jenis aksi. Untuk detail, lihat 5.5 AspAction.

scancode

int

Kode scan tombol

Contoh kode:

// Tekan tombol
display->sendKeyEvent(AspAction::ACTION_DOWN,scanCode);
// Lepas tombol
display->sendKeyEvent(AspAction::ACTION_UP,scanCode);

3.6 Clipboard

Dari lokal ke cloud

Dari cloud ke lokal

3.6.1 setClipBoardTypes

Prototipe fungsi: virtual void setClipBoardTypes(std::vector<AspClipboardType> types) = 0;

Mengirim format data konten clipboard saat Anda menyalin ke clipboard atau menempel dengan menekan Ctrl+V. Hanya teks yang didukung.

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

types

std::vector<AspClipboardType>

Array jenis clipboard. Untuk detail, lihat 5.8 AspClipboardType.

Contoh kode:

std::vector<AspClipboardType> types;
types.push_back(AspClipboardType::CLIPBOARD_UTF8_TEXT);
client->setClipBoardTypes(types);

3.6.2 notifyClipboardReadComplete

Prototipe fungsi: virtual void notifyClipboardReadComplete(AspClipboardType type, uint8_t* buf, size_t len) = 0;

Deskripsi fungsi: Mengirim konten ke Cloud Phone. Fungsi ini dipanggil saat onClipboardRead(uint8_t selection, AspClipboardType type) dipicu.

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

type

AspClipboardType

Jenis clipboard. Saat ini hanya mendukung teks.

buf

uint8_t*

Pointer ke array byte konten clipboard

len

size_t

Ukuran buf

Contoh kode:

void onClipboardRead(uint8_t selection, AspClipboardType type) override {
        // Dipicu saat menyalin dari lokal ke Cloud Phone melalui client->setClipBoardTypes(types)
        // Panggil notifyClipboardReadComplete untuk mengirim konten clipboard
        client->notifyClipboardReadComplete(type, reinterpret_cast<uint8_t *>(utf8Data.data()), utf8Data.size());
}

3.6.3 Proxy callback IClipboardCallback

Deskripsi antarmuka proxy:

Antarmuka

Deskripsi

void onClipboardRead(uint8_t selection, AspClipboardType type)

Dipicu saat menyalin dari lokal ke Cloud Phone melalui setClipBoardTypes(types). Panggil notifyClipboardReadComplete untuk mengirim konten clipboard. Untuk detail jenis, lihat 5.8 AspClipboardType.

void onClipboardWrite(std::vector<AspClipboardData> dataV) 

Dipicu saat menyalin dari Cloud Phone ke lokal. Tulis dataV ke clipboard lokal. Untuk detail data, lihat 4.6 AspClipboardData.

Contoh kode:

class AspClipboardlmpl :public IClipboardCallback
{
public:
    AspClipboardlmpl() {};

    void onClipboardRead(uint8_t selection, AspClipboardType type) override {
        // Dipicu saat menyalin dari lokal ke Cloud Phone melalui client->setClipBoardTypes(types)
        // Panggil notifyClipboardReadComplete untuk mengirim konten clipboard
        //client->notifyClipboardReadComplete(type, reinterpret_cast<uint8_t *>(utf8Data.data()), utf8Data.size());
    }
    void onClipboardWrite(std::vector<AspClipboardData> dataV) override {
        // Tulis dataV ke clipboard lokal saat menyalin dari Cloud Phone
    }
};

3.7 Saluran perintah Shell

3.7.1 sendStringDataToShell

Prototipe fungsi: virtual bool sendStringDataToShell(const std::string& val) = 0;

Deskripsi fungsi: Mengirim perintah Shell.

Deskripsi parameter:

Nama parameter

Jenis parameter

Deskripsi

val

std::string

Perintah ADB Shell dalam format JSON: {"id":"","cmd":""}

Contoh kode:

client->sendStringDataToShell(jsonString)

Perintah ADB umum:

Fungsi

Perintah

Kembali

input keyevent KEYCODE_BACK

Home

input keyevent KEYCODE_HOME

Tombol switch

input keyevent KEYCODE_APP_SWITCH

Bisukan

input keyevent 164

Naikkan volume

input keyevent KEYCODE_VOLUME_UP

Turunkan volume

input keyevent KEYCODE_VOLUME_DOWN

Sembunyikan bilah navigasi

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

Tampilkan bilah navigasi

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

Tangkapan layar

screencap -p /sdcard/Download/abc.png

3.7.2 Proxy callback IShellCmdCallback

Deskripsi antarmuka proxy:

Antarmuka

Deskripsi

void onReceiveStringData(const std::string& val)

Menerima tanggapan perintah Shell berbasis string

void onReceiveRawData(const std::vector<uint8_t> val)

Menerima tanggapan perintah Shell berbasis byte mentah

Contoh kode:

class AspShellCmdlmpl :public IShellCmdCallback
{
public:
    AspShellCmdlmpl() {};

    void onReceiveStringData(const std::string& val) override {
        // Callback untuk tanggapan string
    }
    void onReceiveRawData(const std::vector<uint8_t> val) override {
       // Callback untuk tanggapan byte mentah
    }
};

4. Detail parameter

4.1 AspTicket

struct AspTicket {
    std::string ticket; 		// String tiket untuk mengakses Cloud Phone
    std::string id;			// ID Desktop
    std::string user;			// Username
    std::string uuid;			// UUID lokal (harus sesuai dengan UUID yang digunakan saat meminta tiket)
    std::string systemType;		// Jenis sistem operasi
    uint8_t partner;			// ID mitra
    bool isThumbnailEnable = false;	// Apakah mode gambar mini diaktifkan
};

4.2 ConnectEvent

struct ConnectEvent {
    ConnectEventType type;	// Jenis event seperti keberhasilan atau kegagalan koneksi
    int reason;				// Alasan pemicu event
};

4.3 AspImageFrame

struct AspImageFrame {
    uint32_t frameId;
    void* buffer;
    uint32_t width;
    uint32_t height;
    AspImageFormat format;
    ReleaseBuffer releaseBuffer;
};

4.4 AspAudioFrame

struct AspAudioFrame {
    int sample;				// Laju sampel
    int channels;			// Saluran
    int size;				// Ukuran data
    uint8_t *data;			// Alamat data

    ReleaseBuffer releaseBuffer;	// Fungsi untuk melepas data. Harus dipanggil setelah menggunakan data.
};

4.5 AspAudioPlayback

struct AspAudioPlayback {
    AspAudioReadType readType;	// Metode pengambilan data audio: PUSH atau PULL
    AspAudioMode mode;		// PCM atau OPUS
    uint32_t channels;		// Jumlah saluran
    uint32_t frequency;		// Laju sampel
    AspAudioFormat format;	// RAW atau OPUS

    AudioReader audioReader;	// Fungsi untuk pembacaan data dalam mode PULL. Lihat implementasi demo.
};

4.6 AspClipboardData

struct AspClipboardData {
    AspClipboardType type;
    uint8_t* data;
    uint32_t size;
};

5. Enumerasi

5.1 AspConnType

enum AspConnType {
    ASP_CONN_SOCKET = 0,
    ASP_CONN_SOCKPAIR = 1,
    ASP_CONN_PIPE = 2,
    ASP_CONN_SOCKET_UNIX = 3,
    ASP_CONN_END = ASP_CONN_PIPE,
};

5.2 AspImageFormat

enum class AspImageFormat {
    YUV420P,
    YUV422P,
    YUV444P,
    RGB24,
    RGBA,
    BGRA,
    ARGB,
    ABGR,
    NV12
};

5.3 ConnectEventType

enum ConnectEventType {
    EVENT_CONNECT_SUCCESS,
    EVENT_CONNECT_FAILED,
    EVENT_DISCONNECT_SUCCESS,
    EVENT_RECONNECT_START,
    EVENT_RECONNECT_FAILED
};

5.4 AspImageQuality

enum AspImageQuality {
    ASP_IMAGE_QUALITY_LOSSLESS = 0,
    ASP_IMAGE_QUALITY_HIGH = 1,
    ASP_IMAGE_QUALITY_MEDIUM = 2,
    ASP_IMAGE_QUALITY_LOW = 3,
    ASP_IMAGE_QUALITY_AUTO = 4,
};

5.5 AspAction

enum AspAction {
    ACTION_UP,
    ACTION_DOWN
};

5.6 AspMouseButtonMask

enum AspMouseButtonMask {
    ASP_MOUSE_BUTTON_MASK_L = (1 << 0),
    ASP_MOUSE_BUTTON_MASK_M = (1 << 1),
    ASP_MOUSE_BUTTON_MASK_R = (1 << 2),
    ASP_MOUSE_BUTTON_MASK_F = (1 << 3),
    ASP_MOUSE_BUTTON_MASK_B = (1 << 4),

    ASP_MOUSE_BUTTON_MASK = 0x1f
};

5.7 AspMouseButton

enum AspMouseButton {
    ASP_MOUSE_BUTTON_INVALID,
    ASP_MOUSE_BUTTON_LEFT,
    ASP_MOUSE_BUTTON_MIDDLE,
    ASP_MOUSE_BUTTON_RIGHT,
    ASP_MOUSE_BUTTON_UP,
    ASP_MOUSE_BUTTON_DOWN,
    ASP_MOUSE_BUTTON_SIDE_FORWARD,
    ASP_MOUSE_BUTTON_SIDE_BACK,

    ASP_MOUSE_BUTTON_ENUM_END
};

5.8 AspClipboardType

enum AspClipboardType {
    CLIPBOARD_NONE = 0,
    CLIPBOARD_UTF8_TEXT,
    CLIPBOARD_IMAGE_PNG,  /* Semua klien yang mendukung gambar harus mendukung ini */
    CLIPBOARD_IMAGE_BMP,  /* opsional */
    CLIPBOARD_IMAGE_TIFF, /* opsional */
    CLIPBOARD_IMAGE_JPG,  /* opsional */
    CLIPBOARD_FILE,       /* opsional, file tunggal */
    CLIPBOARD_DIRECTORY,  /* opsional, mendukung rekursif direktori */
    CLIPBOARD_HTML,
    CLIPBOARD_RTF,
    CLIPBOARD_XML_SPREAD_SHEET,
};

6. Kode kesalahan

Kode kesalahan

Pesan kesalahan (%s merepresentasikan cloud phone atau cloud app)

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 sesuai dengan versi server.

ASP SDK

Ketidaksesuaian 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 ketika 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

Putus koneksi dan kesalahan koneksi

2000

Koneksi ke server timeout saat mengambil data dari %s.

ASP SDK

Putus koneksi normal.

2001

%s terputus dari server. Hal ini dapat terjadi jika proses %s dipaksa dihentikan.

ASP SDK

Hal ini biasanya terjadi ketika proses aplikasi 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 direstart. Operasi ini biasanya diinisiasi oleh administrator. Silakan coba lagi nanti.

ASP SDK

Cloud phone dimatikan atau direstart, biasanya oleh administrator.

2004

Koneksi pengguna saat ini dihentikan.

ASP SDK

Client menginisiasi pemutusan koneksi, 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 pull aliran telah dialihkan.

ASP SDK

Mode pull aliran dialihkan 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 menyambungkan kembali...

ASP SDK

Masalah jaringan menyebabkan kehilangan koneksi. ASP SDK sedang mencoba menyambungkan kembali.

2201

%s terputus karena masalah jaringan pada perangkat Anda.

ASP SDK

Masalah jaringan menyebabkan kehilangan koneksi. ASP SDK tidak mendukung koneksi ulang otomatis untuk image saat ini, sehingga sisi aplikasi harus menginisiasinya.

2202

Koneksi ulang ke %s timeout. Periksa jaringan perangkat Anda dan coba lagi.

ASP SDK

Timeout koneksi 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

Koneksi ulang gagal karena token dalam tiket tidak valid.

2300

Koneksi gagal karena parameter tidak valid yang 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 sesuai.

2509

Gateway aliran gagal melakukan probe ke server ASP.

2510

Server menolak probe.
Resolusi: Pastikan server sedang mendengarkan pada port 5912.

2511

Probe server gagal karena alasan selain timeout atau penolakan.

2512

Validasi token gerbang stream gagal.

VpcId di dalam token manajemen tidak sesuai dengan vpcId gerbang 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 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 sisi client. Sebagai uji coba, coba terhubung menggunakan hotspot seluler 5G untuk melihat apakah masalah masih berlanjut.

2702

Jabat tangan SSL antara client dan gateway aliran timeout.

2703

Pertukaran "hello" antara client dan gateway aliran timeout.

2704

Server ASP mengalami waktu habis saat merespons permintaan pembuatan koneksi.

Kemungkinan penyebabnya meliputi server ASP yang macet, masalah jaringan, gambar yang tidak responsif, atau penggunaan CPU/memori yang tinggi.

2705

Klien ASP mengalami waktu habis saat menunggu frame pertama.

Kemungkinan penyebab meliputi server ASP yang macet, kegagalan pembuatan frame (disebabkan oleh penangkapan layar atau masalah driver GPU), masalah jaringan, atau penggunaan CPU/memori yang 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. Hal ini biasanya terjadi selama pengembangan.

5200

Koneksi ulang client timeout. Silakan coba lagi nanti.

Sisi aplikasi

7. FAQ

Bagaimana cara me-restart Cloud Phone?

Panggil API manajemen Restart instance untuk me-restart Cloud Phone. Setelah memanggil API ini, koneksi sisi client ke Cloud Phone akan terputus. Lakukan koneksi ulang setelah proses restart selesai.

Beralih antara gambar mini dan kontrol utama

Untuk beralih dari gambar mini ke kontrol utama, tutup terlebih dahulu koneksi gambar mini dan tunggu hingga pemutusan koneksi selesai sebelum membuka koneksi kontrol utama.

image.svg

Untuk beralih dari kontrol utama ke gambar mini, tutup terlebih dahulu koneksi kontrol utama dan tunggu hingga pemutusan koneksi selesai sebelum membuka kembali koneksi gambar mini.

sequenceDiagram
      participant App
      participant Sdk
      App->>Sdk: close(true)
      Sdk-->>App: onConnectEvent EVENT_DISCONNECT_SUCCESS
      App->>Sdk: reopen(Ticket)