Ini adalah jalur onboarding terpendek untuk integrator iOS: dari inisialisasi, menampilkan gambar di layar, mengirimkan instruksi kontrol, hingga mengakhiri pengalaman. Untuk tanda tangan metode, bidang, dan kode kesalahan lengkap, lihat Referensi API iOS SDK.
0. Apa yang Akan Anda Bangun
Sebuah loop end-to-end minimal berupa "masuk ke dunia → pengalaman video real-time → interaksi → akhiri". Titik masuk runtime adalah HappyOysterEngine.shared global dan handle sesi sekali pakai OysterTravel yang dibuatnya.
1. Persyaratan
Item | Persyaratan |
|---|---|
OS Minimum | iOS 15.0+ |
Bahasa | Swift ( |
Threading | API publik bersifat |
Impor |
|
1.1 Tambahkan SDK melalui CocoaPods
SDK didistribusikan sebagai biner prakompilasi (xcframework) melalui subspec CocoaPods, yang dipublikasikan ke CocoaPods Trunk publik — referensikan langsung berdasarkan versi, tidak diperlukan file podspec lokal.
pod install dan buka .xcworkspace yang dihasilkan (bukan .xcodeproj).
AliVCSDK_ARTC wajib disertakan setiap kali Anda menarik HappyOysterSDK/StreamAliRTC: jika hilang, SDK akan kembali secara diam-diam ke Loopback — ia tetap terhubung dan mencapai running, tetapi menampilkan layar hitam tanpa kesalahan.2. Dua Jenis Kredensial (Pahami Terlebih Dahulu untuk Menghindari Masalah)
SDK tidak memperoleh atau memperbarui kredensial apa pun secara mandiri; Anda harus menyuntikkan semuanya:
Kredensial | Sumber | Tujuan | Cara Menyuntikkan |
|---|---|---|---|
Token autentikasi HTTP | Aplikasi Anda mengambilnya dari backend Anda sendiri | Autentikasi umum untuk panggilan SDK ke gateway (berumur panjang, memerlukan pembaruan) |
|
Tiket sekali pakai | Dikeluarkan oleh server Anda setelah pertukaran melalui API kredensial Travel | Digunakan untuk satu pengalaman, divalidasi segera setelah digunakan | Diteruskan sebagai argumen |
updateToken digunakan untuk autentikasi umum, sedangkan ticket adalah kredensial bergabung sekali pakai. Kunci AK / penandatanganan hanya ada di server Anda dan tidak pernah diekspos ke klien.3. Langkah Integrasi
Siklus hidup: daftarkan stream engine → inisialisasi → suntikkan token → buat sesi → lampirkan video + berlangganan event → mulai → interaksi → akhiri.
Langkah 1: Mendaftarkan Stream Engine
Satu-satunya titik masuk untuk merender video. Panggil sekali saat peluncuran aplikasi; panggilan berulang aman dilakukan.
Langkah 2: Menginisialisasi SDK
Anda harus menginisialisasi sekali sebelum memanggil API lainnya. Untuk mengganti gateway atau model, cukup panggil lagi — saat menganggur, konfigurasi terbaru akan digunakan dan token yang disuntikkan tetap dipertahankan; panggilan hanya diabaikan saat travel sedang berlangsung, jadi lakukan end() terlebih dahulu.
Langkah 3: Menyuntikkan Token Autentikasi HTTP (push)
Ambil Model Studio API Key sementara dari backend Anda sendiri dan suntikkan. Suntikkan ulang setelah kedaluwarsa.
Langkah 4: Membuat Handle Sesi
Buat OysterTravel dari ticket sekali pakai. Belum ada yang terhubung, tetapi tampilan video sudah tersedia.
Langkah 5: Melampirkan Tampilan Video dan Berlangganan Event
SDK menyediakan tampilannya, host menempatkannya. Berlangganan sebelum start() agar Anda tidak melewatkan perubahan status awal.
Langkah 6: Memulai Pengalaman
Hubungkan dan mulai mainkan. SDK kemudian secara otomatis mempertahankan koneksi real-time dan polling status, serta menampilkan status melalui events.
start(maxExperienceTimeSec:) hanya berlaku untuk adventure; directing dan acting mengabaikan parameter tersebut.model yang Anda teruskan ke initialize pada Langkah 2. Dengan model per-mode (happyoyster-1.0-adventure / -directing / -acting), setiap model merupakan rute aplikasi gateway-nya sendiri, sehingga satu initialize hanya melayani dunia dari satu mode; ticket dikeluarkan oleh server Anda di bawah rute mode dunia tersebut, dan start() mengirimkannya ke rute dari model yang dikonfigurasi saat ini — ketidakcocokan akan gagal pada langkah ini.
Sebelum memasuki dunia dengan mode yang berbeda, panggil initialize() lagi dengan model yang cocok — tanpa cleanup() dan tanpa updateToken() ulang:
mode hanya tiba dalam respons langkah ini (data.mode); sebelum panggilan dilakukan, SDK tidak memegang apa pun selain ticket yang tidak transparan dan nama model. Aplikasi yang menawarkan satu mode tidak terpengaruh dan hanya melakukan inisialisasi sekali.
initialize() yang berulang akan diabaikan dengan peringatan — lakukan end() terlebih dahulu.Langkah 7: Interaksi Real-Time (Pilih Satu Berdasarkan Mode)
sendCommand melakukan throttle secara internal pada siklus menang-terbaru 42ms (24FPS), sehingga host dapat memanggilnya pada frekuensi tinggi:
- Tindakan sekali jalan seperti melompat, menyerang, membungkuk, dan berlari dikirimkan satu kali.
- Pergerakan dan rotasi tampilan dikirimkan secara terus-menerus selama ditahan, dan Anda cukup berhenti memanggilnya saat dilepaskan.
- Anda tidak perlu mengirim
noneatau memanggilflushCommands()saat dilepaskan; SDK tidak pernah menghasilkan perintah berhenti secara mandiri, dan server mengakhiri tindakan setelah saluran real-time menjadi sepi.
Langkah 8: Jeda / Lanjutkan / Putar Ulang (Bergantung pada Mode)
adventure tidak mendukung none dari fitur ini; acting mendukung jeda/lanjutkan tetapi tidak mendukung putar ulang — sembunyikan titik masuk putar ulang pada mode tersebut. Panggilan yang tidak cocok akan ditolak secara lokal oleh SDK (103003 / 103002).Langkah 9: Mengakhiri Pengalaman
Memutus koneksi, menghentikan polling, dan melepaskan semua sumber daya sesi; ticket telah terpakai. Bersifat idempoten — setiap jalur keluar harus bermuara padanya.
await engine.cleanup() saat membongkar SDK atau mengganti gateway.4. Contoh Lengkap (SwiftUI)
5. Praktik Terbaik
- Siklus hidup: Panggil
OysterStream.register()+initialize()sedini mungkin saat peluncuran aplikasi, masing-masing sekali secara global; selalu panggilend()saat meninggalkan halaman pengalaman untuk memastikan koneksi real-time dan sumber daya dilepaskan.OysterTravelbersifat sekali pakai — buat yang baru melaluicreateTravelsetelah mencapai status terminal. - Pembaruan token: Pastikan token HTTP masih baru sebelum memulai pengalaman; saat Anda menerima callback kesalahan terkait autentikasi, ambil token baru dan panggil
updateToken(tidak fatal, tidak mengakhiri pengalaman). - Tingkat keparahan kesalahan: Untuk kesalahan fatal, SDK secara otomatis mengakhiri pengalaman saat ini, menampilkannya melalui
.errordarievents, dan beralih ke status terminalfailed; Anda harus kembali ke layar yang ditampilkan sebelum "mulai pengalaman". Kesalahan non-fatal hanya ditampilkan dan dapat dicoba ulang. Lihat tabel kode kesalahan lengkap di Referensi API. - Adaptasi mode: Mode directing dan acting menampilkan input teks (
sendInstruct); mode adventure menampilkan widget kontrol (sendCommand). Hanya directing yang menampilkan titik masuk putar ulang. Untuk dunia acting, pilih orientasi pemutar dariaspectRatio(potret9:16secara default).
6. Langkah Selanjutnya
- API Lengkap (
pause()/resume()/rewind(toSec:), model data, kode kesalahan) → Referensi API iOS SDK